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

时间:2012-02-18 15:47:31

标签: 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 +的回答也很好......

1 个答案:

答案 0 :(得分:3)

在Windows中,屏幕(和窗口......)表面是......易失性的,就像沙箱一样。窗户的“重叠”和未覆盖表面的重新绘制是适当的事件管理所产生的错觉。

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

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