其他分享
首页 > 其他分享> > c – 使用类似于Inspect的GDI(或GDI)在屏幕上绘图

c – 使用类似于Inspect的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中,屏幕(和窗口……)表面是……易失性的,就像沙箱一样.窗户的“重叠”和未覆盖表面的重新绘制是适当的事件管理所产生的错觉.

绘制的所有内容都会保留在那里,直到覆盖其他内容为止.
“揭开”表面使得表示该表面的窗口接收WM_PAINT消息.这取决于窗口过程通过重新绘制所有内容来对该消息作出反应.

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

标签:c,windows,api,gdi,gdi-2
来源: https://codeday.me/bug/20191002/1841434.html