c++ - 使用类似于 Inspect 的 GDI+(或 GDI)在屏幕上绘图

标签 c++ windows api gdi+ gdi

我正在尝试使用 GDI+ 在屏幕上(整个屏幕,在所有其他窗口的顶部)绘图。
我已将 NULL 传递给 GetDC 以将 HDC 显示到屏幕上,然后使用它创建一个 Graphics 对象,并使用 DrawRectangle 在屏幕上绘制矩形。
一切正常......除了......矩形内部不会更新。

就像我在命令提示符上绘制它并移动命令提示符一样,矩形的内部仍然是黑色。 我希望看到矩形下方的内容。

这是绘图的代码..

Pen BluePen(Color(255, 0, 255, 0), 2);
Graphics graphics(screenDC);
graphics.DrawRectangle(&BluePen, myRect);

非常简单,那么我需要做些什么才能让矩形的内部在屏幕显示时更新吗?或者使其真正透明。

================= 编辑 =================

好吧,我已经放弃了,并认为这是不可能的,直到......我意识到 Windows SDK 附带的 Inspect 工具可以完美地做到这一点。

我想重新创建类似于突出显示矩形的东西,如果我选择一个窗口(例如 Firefox),然后将 Inspect 置于焦点,我可以自由移动它,所有内容都得到完美更新。 甚至没有任何闪烁。

那么...有人知道 Inspect 是如何做到这一点的吗?

用 GDI 而不是 GDI+ 的答案也很好...

最佳答案

在 Windows 中,屏幕(和窗口......)表面......像沙箱一样不稳定。 window 的“重叠”和未覆盖表面的重新粉刷是适当事件管理造成的错觉。

绘制的所有内容都保留在那里,直到在其上绘制其他内容。 “揭开”表面使表示该表面的窗口接收 WM_PAINT 消息。由窗口过程通过重新绘制应该位于其下的所有内容来对该消息使用react。

现在,除非您以某种方式拦截发送到桌面窗口的 WM_PAINT 消息,否则您几乎没有机会知道桌面需要重新绘制,因此您的绘制代码将不会被调用,也不会发生重新绘制。或者更好的是,它仅在桌面窗口更新代码之后发生,而不知道您的绘画。

关于c++ - 使用类似于 Inspect 的 GDI+(或 GDI)在屏幕上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342570/

相关文章:

c++ - 传递性 add_custom_command 依赖关系未结转

在 c 中为 Windows 操作系统创建中断

ios - Dropbox Sync API 不会下载任何文件

api - 将 Postman 中的 API 响应保存到文件

swift - 在线合并两个或多个 API 的响应

c++ - 在qt中延迟显示QStackedWidget Item

c# - 不同 K 和 Volume 之间的 K-Dop 碰撞

java - Windows Azure cspack.exe 是开源的吗?

linux - 无法通过 samba 从 Windows 访问 GlusterFS 安装卷

C++通过引用传递分配的内存/数组