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だと、
中身も塗りつぶされる。
しかし、
FrameRgnだと、
青い境界線だけ描かれる。
Sample/winapi/FrameRgn/FrameRgn/src/FrameRgn at master · bg1bgst333/Sample · GitHub