一尘不染

如何在C#中有效地在桌面上绘制?

c#

我想直接在C#的桌面上绘制。经过一番搜索,我最终使用了桌面HDC中的Graphics对象(空)。然后,我通常使用此Graphics对象绘画。

问题是重新绘制屏幕的任何部分时我的形状都会丢失。我尝试了While循环,但实际上它实际上以应用程序可以的最快速度绘制,这不是桌面的更新速度。

通常,我需要将绘图代码放入“ OnPaint”事件中,但对于台式机来说并不存在。

我该怎么办?

示例代码:https :
//stackoverflow.com/questions/1536141/how-to-draw-direct-on-the-windows-
desktop-c


阅读 279

收藏
2020-05-19

共1个答案

一尘不染

当您绘制到HDC(NULL)时,您将以一种不受管理的方式绘制到屏幕上。如您所知,一旦Windows刷新了屏幕的该部分,您的更改就会被覆盖。

有两种选择,取决于您要实现的目标:

  1. 创建一个无边界的,可能是非矩形的窗口。(使用SetWindowRgn使窗口成为非矩形。)您可以将其设为桌面窗口的子级。
  2. 子类化桌面窗口。这不是简单明了,并且涉及将DLL注入Explorer.exe进程。
2020-05-19