用BitBlt截取整屏后半透明窗口不能显示的解决办法

    xiaoxiao2021-03-25  113

    用vc对屏幕截屏,通用写法是

    HWND hWnd = ::GetDesktopWindow(); HDC hDC = ::GetDC(hWnd); HDC hMemDC = ::CreateCompatibleDC(hDC); HBITMAP hBitmap = ::CreateCompatibleBitmap(hDC, 1024, 768); HBITMAP hOldBmp = (HBITMAP)::SelectObject(hMemDC, hBitmap); BitBlt(hMemDC, 0, 0, 1024, 768, hDC, 0, 0, SRCCOPY);

    但是发现对透明窗口不起作用,会出现即使透明窗口在最顶层,但截取之后图片依然没有透明窗口的内容.

    解决办法:

    其实很简单,只是对BitBlt函数最后一个参数不熟悉才会不知所措.改成下面的样子就可以

    #ifndef CAPTUREBLT #define CAPTUREBLT (DWORD)0x40000000 #endif DWORD bltFlags = SRCCOPY; bltFlags |= CAPTUREBLT; BitBlt(hMemDC, 0, 0, 1024, 768, hDC, 0, 0, bltFlags);

    转载请注明原文地址: https://ju.6miu.com/read-23186.html

    最新回复(0)