使用类似于Inspect的GDI+(或GDI)在屏幕上绘制
Draw on screen with GDI+ (or GDI) similar to Inspect
我正在尝试使用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消息,否则您基本上没有机会知道桌面需要重新绘制,因此您的绘制代码将不会被调用,也不会发生重新绘制。或者更好的是,它只发生在桌面窗口更新代码之后,而不知道你的绘画。
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- Winapi:屏幕截图未显示在窗口中
- 如何在快板的屏幕中显示子位图的绘制?
- 按回车键后输出屏幕关闭
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- SFML 向下移动时如何围绕屏幕中心旋转?
- 截取屏幕截图后程序卡住
- C++鼠标单击时的屏幕截图不起作用
- 屏幕插入运算符<<的运算符过载问题
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 获取网格中心的屏幕位置
- avcodec_receive_packet错误(gdi 屏幕截图 + ffmpeg)
- Gdi+Take屏幕截图多个显示器
- 使用类似于Inspect的GDI+(或GDI)在屏幕上绘制
- 屏幕外绘制GDI+
- 记录屏幕时不出现的奇怪的 MFC/GDI 行为(空白图像)
- 可以闪存检测正在拍摄的屏幕截图(或GDI位副本)