我试图在桌面上创建双缓冲 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,但没有任何改变
您无法仅通过绘制到屏幕的设备上下文来创建“桌面上的 gdi 覆盖”。绘制到
GetDC(NULL)
可能会在屏幕上获得一些像素,这些像素在其他东西覆盖它们之前几毫秒内可见。
Windows 被称为“Windows”是有原因的。如果您希望某些内容保留在屏幕上,您需要在您创建的窗口的 WM_PAINT 处理程序中绘制它。否则,你无法控制你所画的内容何时会被覆盖。