【发布时间】:2011-12-11 01:09:33
【问题描述】:
我想捕获一个桌面框架并将其存储在 HBITMAP 结构中。 然后,在从我的应用程序主窗口的设备上下文中创建一个适当的内存设备上下文之后,我会选择 HBITMAP 并使用 StretchBlt 来显示位图。
但这并没有按预期工作,因为它只是显示一个黑框。 hdc和mem_hdc分别是之前初始化的主窗口的设备上下文和内存设备上下文。
代码如下:
...
hDC desk_hdc, desk_mem_hdc;
BITMAP bitmap;
HBITMAP hbitmap;
desk_hdc = GetDC(NULL);
hbitmap = CreateCompatibleBitmap(desk_hdc, GetDeviceCaps(desk_hdc, HORZRES), GetDeviceCaps(desk_hdc, VERTRES));
GetObject(hbitmap, sizeof(BITMAP), &bitmap);
SelectObject(mem_hdc, hbitmap);
StretchBlt(hdc, 0, 0, 1024, 768, mem_hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY|CAPTUREBLT|NOMIRRORBITMAP);
...
【问题讨论】:
-
使用样板 SDK 代码示例来正确处理并避免泄漏句柄:msdn.microsoft.com/en-us/library/dd183402%28v=VS.85%29.aspx