api - Er der sådan en ting som et vindue, der er tegnet på en bitmap snarere end til skærmens overflade?

Indlæg af Hanne Mølgaard Plasc

Problem



Er der alligevel at oprette en HWND, der trækkes på en bitmap (fungerer som en virtuel skærmoverflade) snarere end på den aktuelle skærmoverflade?


Det ser ud til, at sådan en ting ville være nyttig, fordi der er ting, du kan gøre med et vindue, du ikke kan gøre med en DC, såsom oprettelse af børnevinduer (måske med kontrol) eller at få DC via GetDCEx.

Bedste reference


Det ser ud til, at det enkle svar på mit spørgsmål er nej!

Andre referencer 1


Du skal behandle WM\_PAINT og tegne billedet der.


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;
}