Laz*_*zlo 14 c# buffer drawing gdi onpaint
我想在C#中直接在桌面上绘图.从搜索一下,我最终使用Desktop HDC中的Graphics对象(null).然后,我正常使用这个Graphics对象绘制.
问题是当重绘屏幕的任何部分时,我的形状会丢失.我尝试了一个While循环,但它实际上最终绘制的速度与应用程序一样快,这不是桌面的更新速率.
通常,我需要将我的绘图代码放在"OnPaint"事件中,但桌面上不存在这样的事情.
我该怎么办?
示例代码:https://stackoverflow.com/questions/1536141/how-to-draw-directly-on-the-windows-desktop-c
Chr*_*lor 15
我在这里发布了两个类似要求的解决方案
基本上你有两个选择.
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);
}
Run Code Online (Sandbox Code Playgroud)
2-我在上面的链接中提供的第二个选项是创建一个透明的最顶层窗口,并在该窗口中完成所有绘图.这基本上为您可以绘制的桌面提供透明覆盖.正如我在原始答案中提到的那样,其中一个可能的缺点是,其他窗口也是最顶级的,并且是在应用程序启动后创建的,它会遮挡您最顶层的窗口.如果这是一个问题,这可以解决.
对于选项2,使表单透明就像使用透明度键一样简单,这允许鼠标点击等落入底层桌面.
BackColor = Color.LightGreen;
TransparencyKey = Color.LightGreen;
Run Code Online (Sandbox Code Playgroud)
当您绘制到HDC(NULL)时,您将以非托管方式绘制到屏幕.正如您所发现的,只要Windows刷新屏幕的这一部分,您的更改就会被覆盖.
根据您想要实现的目标,有几种选择:
| 归档时间: |
|
| 查看次数: |
30728 次 |
| 最近记录: |