gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:36:52 27 4
gpt4 key购买 nike

我正在尝试使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com