ソフトウェア開発 Win32プログラミング

ウィンドウのクライアント領域を描画する

戻る


ウィンドウのクライアント領域を描画する方法は、2通りある。 1つは、GetDCで取得したディスプレイDCで描画する方法である。例を挙げる:

// クライアントを描画する関数。hWndはウィンドウのハンドル。
VOID DrawClient(HWND hWnd)
{
    HDC hdc;
    HPEN hPen;
    HBRUSH hbr;
    hdc = GetDC(hWnd);          // ディスプレイDCを取得する。

    hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));  // 赤色、太さ3ピクセルのペン。
    hbr = CreateSolidBrush(RGB(0, 255, 0));         // 明るい緑色のブラシ。
    // ここでhdcを使って適当な描画関数を呼ぶ。
    SelectObject(hdc, hPen);    // ペンを選択する。
    SelectObject(hdc, hbr);     // ブラシを選択する。
    Rectangle(hdc, 10, 10, 100, 100);   // 四角形を描く。

    ReleaseDC(hWnd, hdc);       // ディスプレイDCを解放する。

    DeleteObject(hPen);		// ペンを破棄する。
    DeleteObject(hbr);		// ブラシを破棄する。
}

もう1つは、WM_PAINTメッセージへの反応としてBeginPaintとEndPaintの間で描画する方法である。 例を挙げる:

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    HGDIOBJ hbrOld;
    switch(uMsg)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        if (hdc != NULL)
        {
            // ここでhdcを使って適当な描画関数を呼ぶ。
            hbrOld = SelectObject(hdc, GetStockObject(GRAY_BRUSH));    // ブラシを選択する。
            Rectangle(hdc, 10, 10, 100, 100);
            SelectObject(hdc, hbrOld);

            EndPaint(hWnd, &ps);
        }
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}

詳しくはWM_PAINTメッセージのヘルプを見ること。


戻る

©片山博文MZ
katayama.hirofumi.mz@gmail.com

inserted by FC2 system