gpt4 book ai didi

c - 为什么屏幕截图没有使用 SelectObject 和 BitBlt 函数绘制到我的窗口上?

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:18 47 4
gpt4 key购买 nike

我正在尝试从屏幕的 0x0(左上)位置获取 500x500 的屏幕截图并将其放在窗口中。

这是我的代码(hwnd 是我的窗口句柄):

HDC appDc = GetDC(hwnd);
HDC dc = GetDC(NULL);
HBITMAP bitmap = CreateCompatibleBitmap(dc, 500, 500);
HDC memoryDc = CreateCompatibleDC(dc);
SelectObject(memoryDc, bitmap);
BitBlt(appDc, 0, 0, 500, 500, dc, 0, 0, SRCCOPY);
ShowWindow(hwnd, SW_SHOW);
SetWindowText(hwnd, _T("Window"));

我在这里错过了什么?我在窗口内变黑而不是屏幕截图。

编辑

在我将 memoryDc 更改为 dc 后它起作用了它以前是 BitBlt(appDc, 0, 0, 500, 500, memoryDc, 0, 0, SRCCOPY);但现在的问题是 SelectObject 不工作。我的意思是它没有将图像放入 HBITMAP。但是 BitBlt 正在从 dc 复制到 appDc

最佳答案

首先,设备上下文似乎存在混淆。您从 memoryDc 到 appDc,但 memoryDc 不包含任何内容 - 它已被创建为与 dc 兼容,但这并不意味着它共享内容。此外,您不释放示例中的 DC。

其次,您对 ShowWindow() 的调用似乎暗示该窗口以前不可见。如果是这种情况,则之前“绘制”的任何内容实际上都没有被绘制并且不会在窗口中可见。在位图中捕获屏幕内容并在 WM_PAINT 期间显示它。

关于c - 为什么屏幕截图没有使用 SelectObject 和 BitBlt 函数绘制到我的窗口上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5498923/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com