使用Delphi绘制和清除桌面画布

jon*_*bar 1 delphi graphics desktop canvas

我正在尝试使用桌面画布绘制整个屏幕并直接绘制到它.问题是我无法清除桌面画布.我已经尝试将canvas.pen.style设置为psNotXOR并绘制旧图像但不幸的是,这不够可靠,并且在某些情况下仍然存在一些遗留问题.

我需要在鼠标悬停在窗口/控件周围时绘制一个选择矩形.

mgh*_*hie 5

清除后,您不会在操作系统上写下有关人工制品问题的操作系统.

至少在桌面组合激活的情况下,直接绘制到桌面并进行XOR绘画是一个非常糟糕的主意(请参阅此博客文章中的 "绘图到屏幕阅读 - Baaaad!" ).除了负面的性能影响之外,您无法确定其他绘画同时发生了什么以及哪些效果和动画会改变显示的内容,因此简单的XOR可能不足以完全删除所有内容.

实现它的一种可能方法是桌面大小的透明覆盖窗口,并在其上绘制橡皮筋选择器.如果大小更改应该足够,则无效整个窗口,无需删除旧的选择行.如果覆盖被移除,那么线也将消失.桌面组合将确保不会发生闪烁.但是,在选择区域时切换应用程序将会出现问题,您需要抓住它并立即取消选择.

编辑:

我刚用Delphi 2009测试了它,并使用以下测试应用程序:

  • FormStyle设置为fsStayOnTopAlphaBlend设置为的表单True
  • 使用重写CreateParams()方法添加WS_EX_TRANSPARENT扩展样式标志

我可以将所有鼠标点击传递到底层窗口,同时可以绘制到它们顶部的窗口.这应该让你开始.