我想用C#直接在桌面上画图。经过一番搜索,我最终使用了桌面 HDC 中的 Graphics 对象(空)。然后,我使用这个 Graphics 对象正常绘画。
问题是,当屏幕的任何部分被重绘时,我的形状就会丢失。我尝试了一个 While 循环,但它实际上最终以与应用程序一样快的速度绘制,这不是桌面的更新速率。
通常,我需要将绘图代码放在“OnPaint”事件中,但桌面上不存在这样的事情。
我该怎么做呢?
示例代码:https://stackoverflow.com/questions/1536141/how-to-draw-directly-on-the-windows-desktop-c https://stackoverflow.com/questions/1536141/how-to-draw-directly-on-the-windows-desktop-c
我针对类似的需求发布了两个解决方案here https://stackoverflow.com/questions/2622612/c-cursor-highlighting-follower/2624564#2624564
基本上你有两个选择。
1- 获取桌面的图形对象并开始在其上绘图。问题是您是否需要开始清除之前绘制的内容等。
Point pt = Cursor.Position; // Get the mouse cursor in screen coordinates
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
{
g.DrawEllipse(Pens.Black, pt.X - 10, pt.Y - 10, 20, 20);
}
2-我在上面的链接中提供的第二个选项是创建一个透明的最顶层窗口并在该窗口中进行所有绘图。这基本上为桌面提供了一个透明的覆盖层,您可以在上面绘图。正如我在原始答案中提到的,这样做的一个可能的缺点是,同样位于最顶层且在应用程序启动后创建的其他窗口会遮挡最顶层的窗口。如果这是一个问题的话,这是可以解决的。
对于选项 2,使表单透明就像使用透明键一样简单,这允许鼠标单击等落入底层桌面。
BackColor = Color.LightGreen;
TransparencyKey = Color.LightGreen;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)