当我尝试制作双缓冲 GDI 覆盖时出现黑屏

问题描述 投票:0回答:1

我试图在桌面上创建双缓冲 GDI 覆盖,但我得到的只是带有红线的黑屏

    HDC hdc = GetDC(0);

    HDC mem_handle = CreateCompatibleDC(hdc);
    HBITMAP bitmap_hndl = CreateCompatibleBitmap(hdc, 1920, 1080);

    HBITMAP old0 = (HBITMAP)SelectObject(mem_handle, bitmap_hndl);

    HPEN pen = CreatePen(PS_SOLID, 5, RGB(255, 0, 0));
    HGDIOBJ oldpen = SelectObject(mem_handle, pen);

    POINT Dots[2];
    Dots[0] = { 500, 500 };
    Dots[1] = { 200, 200 };
    DWORD NumDots = 2;
    PolyPolyline(mem_handle, Dots, &NumDots, 1ull);

    BitBlt(hdc, 0, 0, 1920, 1080, mem_handle, 0, 0, SRCCOPY | CAPTUREBLT);

    SelectObject(mem_handle, oldpen);
    SelectObject(mem_handle, old0);

    DeleteObject(pen);
    DeleteObject(bitmap_hndl);
    DeleteDC(mem_handle);
    ReleaseDC(0, hdc);

我尝试使用 alphabland 和透明blt,但没有任何改变

c++ winapi gdi+ gdi buffering
1个回答
0
投票

您无法仅通过绘制到屏幕的设备上下文来创建“桌面上的 gdi 覆盖”。绘制到

GetDC(NULL)
可能会在屏幕上获得一些像素,这些像素在其他东西覆盖它们之前几毫秒内可见。

Windows 被称为“Windows”是有原因的。如果您希望某些内容保留在屏幕上,您需要在您创建的窗口的 WM_PAINT 处理程序中绘制它。否则,你无法控制你所画的内容何时会被覆盖。

© www.soinside.com 2019 - 2024. All rights reserved.