【问题标题】:Windows GDI Context - Displaying BitmapsWindows GDI 上下文 - 显示位图
【发布时间】: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);
...

【问题讨论】:

标签: c++ bitmap gdi


【解决方案1】:

StretchBlt 操作的源 dc 是 mem_hdc,它具有兼容的未初始化位图。这就是为什么你会得到一个黑框。

如果要捕获桌面内容,必须先将其复制到mem_hdc 中的位图中。在SelectObject 之后做:

BitBlt( mem_hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, desk_hdc, 0, 0, SRCCOPY );

【讨论】:

    猜你喜欢
    • 2011-12-17
    • 2023-03-03
    • 2011-12-18
    • 1970-01-01
    • 2012-05-10
    • 2016-01-08
    • 2018-12-12
    • 2011-01-17
    • 2016-03-30
    相关资源
    最近更新 更多