ssCAROのブログ

色んなとこで見つけたプログラムのメモ置き場っぽい

Bitmapに描いて表示する

// 普段、画面に表示する内容は文字列ばっかりなので
// ビットマップの描画方法とかをメモ。

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HBITMAP hBmp;

    switch(uMsg) {
    case WM_CREATE:
    {
        HDC hDC:
        HDC hMemDC;

        hDC = GetDC(hWnd);
        hBmp = CreateCompatibleBitmap(hDC, 200, 100);
        hMemDC = CreateCompatibleDC(hDC);

        SelectObject(hMemDC, hBmp);
        SelectObject(hMemDC, GetStockObject(NULL_PEN));

        PatBlt(hMemDC, 0, 0, 200, 100, WHITENESS);

        DeleteDC(hMemDC);
        ReleaseDC(hWnd, hDC);
        return 0;
    }

    case WM_KEYDOWN:
        {
        HDC hDC;
        HDC hMemDC;

        hDC = GetDC(hWnd);
        hMemDC = CreateCompatibleDC(hDC);
        SelectObject(hMemDC, hBmp);

        SelectObject(hMemDC, GetStockObject(BLACK_PEN));
        Rectangle(hMemDC, 10, 10, 120, 60);

        DeleteDC(hMemDC);
        ReleaseDC(hWnd, hDC);
        return 0;
        }

    case WM_PAINT:
        {
        HDC hDC;
        HDC hMemDC;
        PAINTSTRUCT ps;

        hDC = BeginPaint(hWnd, &ps);
        hMemDC = CreateCompatibleDC(hDC);
        SelectObject(hMemDC, hBmp);

        BitBlt(hDC, 0, 0, 200, 100, hMemDC, 0, 0, SRCCOPY);

        DeleteDC(hMemDC);
        EndPaint(hWnd, &ps);
        return 0;
        }
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}