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

Draw on screen with GDI+ (or GDI) similar to Inspect

本文关键字:GDI 屏幕 绘制 类似于 Inspect GDI+      更新时间:2023-10-16

我正在尝试使用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+中的答案也很好。。。

在窗口中,屏幕(和窗口…)表面是。。。易挥发,像沙盒。窗户的"重叠"和未覆盖表面的重新喷漆是由适当的事件管理造成的幻觉。

所有被画出来的东西都留在那里,直到其他东西被画出来。"揭开"曲面会使表示该曲面的窗口接收WM_PAINT消息。这取决于窗口程序,通过重新绘制应该在其下的所有内容来对该消息做出反应

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