我正在尝试使用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 +的回答也很好......
答案 0 :(得分:3)
在Windows中,屏幕(和窗口......)表面是......易失性的,就像沙箱一样。窗户的“重叠”和未覆盖表面的重新绘制是适当的事件管理所产生的错觉。
所有东西都被留在那里,直到其他东西被绘制出来。 “揭开”表面使得表示该表面的窗口接收WM_PAINT消息。这取决于那个窗口程序,通过重新绘制所有内容来对该消息作出反应。
现在,除非您以某种方式拦截发送到桌面窗口的WM_PAINT消息,否则您几乎没有机会知道桌面需要重新绘制,因此您的绘制代码将不会被调用且不会重新绘制。或者更好的是它只发生在桌面窗口更新代码之后,它不知道你的油漆。