FrameRgn

FrameRgnは、リージョンの境界線を指定のブラシで描画する。

FrameRgn function (wingdi.h) - Win32 apps | Microsoft Docs

ブラシ、縦線の太さ、横線の太さを指定できる。

今回は、赤いブラシと青いフレーム用ブラシの2種類を用意。

		// 画面の描画を要求された時.
		case WM_PAINT:		// 画面の描画を要求された時.(uMsgがWM_PAINTの時.)
 
			// WM_PAINTブロック
			{

				// このブロックのローカル変数の宣言
				HDC hDC;			// デバイスコンテキストハンドルを格納するHDC型変数hDC.
				PAINTSTRUCT ps;		// ペイント情報を管理するPAINTSTRUCT構造体型の変数ps.
				HBRUSH hOldBrush;	// SelectObjectされるまで使っていた古いブラシのハンドルhOldBrush.

				// ウィンドウの描画開始
				hDC = BeginPaint(hwnd, &ps);	// BeginPaintでこのウィンドウの描画の準備をする. 戻り値にはデバイスコンテキストハンドルが返るので, hDCに格納.
				
				// 赤いブラシを選択.
				hOldBrush = (HBRUSH)SelectObject(hDC, hBrush);	// hBrushを選択.

				// フレーム付きリージョンの描画.
				PaintRgn(hDC, hRgn);	// 赤いリージョンの描画.
				//FrameRgn(hDC, hRgn, hFrameBrush, 1, 3);	// 横幅1で縦幅3のフレーム付きリージョンの描画.

				// 元のブラシに戻す.
				SelectObject(hDC, hOldBrush);	// SelectObjectで元のブラシに戻す.

				// ウィンドウの描画終了
				EndPaint(hwnd, &ps);	// EndPaintでこのウィンドウの描画処理を終了する.

			}

			// 既定の処理へ向かう.
			break;	// breakで抜けて, 既定の処理(DefWindowProc)へ向かう.

PaintRgnだと、

PaintRgnだと塗りつぶされる
PaintRgnだと塗りつぶされる

中身も塗りつぶされる。
しかし、

FrameRgnだと、

青い境界線だけ
青い境界線だけ

青い境界線だけ描かれる。

Sample/winapi/FrameRgn/FrameRgn/src/FrameRgn at master · bg1bgst333/Sample · GitHub