Есть ли такая вещь, как окно, которое рисуется на растровом изображении, а не на поверхности дисплея? - PullRequest
0 голосов
/ 07 марта 2012

Есть ли в любом случае создать HWND, который рисуется на растровом изображении (действуя в качестве виртуальной поверхности отображения), а не на фактической поверхности отображения?

Казалось бы, такая вещь была бы полезна, потому что есть вещи, которые вы можете сделать с окном, которые вы не можете сделать с DC, такие как создание дочерних окон (возможно, содержащих элементы управления) или получение DC через GetDCEx.

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Кажется, простой ответ на мой вопрос - НЕТ!

0 голосов
/ 07 марта 2012

Вы должны обработать WM_PAINT и нарисовать там изображение.

LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC, memDc;
    PAINTSTRUCT Ps;
    HBITMAP bmpBackground;
    BITMAP bm;

    switch (message)                   
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;

        case WM_PAINT:
            hDC = BeginPaint(hwnd, &Ps);

            // Load the bitmap from the resource
            bmpBackground = LoadBitmap(hInst, "your_background_image");
            // Create a memory device compatible with the above DC variable
            memDc = CreateCompatibleDC(hDC);
            // Select the new bitmap
            SelectObject(memDc, bmpBackground);

            GetObject(bmpBackground, sizeof(bm), &bm);
            // Copy the bits from the memory DC into the current dc
            BitBlt(hDC, 10, 10,bm.bmWidth, bm.bmHeight, memDc, 0, 0, SRCCOPY);

            // Restore the old bitmap
            DeleteDC(memDc);
            DeleteObject(bmpBackground);
            EndPaint(hwnd, &Ps);
            break;

        default:                    
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
...