Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
本文介绍了在多个监视器上绘制所有窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用以下代码在单个监视器上绘制:
Point cursorLocation;
NativeMethods.GetCursorPos(out cursorLocation);
Screen screen = Screen.FromPoint(cursorLocation);
Point h1 = new Point(screen.Bounds.Left, cursorLocation.Y);
Point h2 = new Point(screen.Bounds.Right, cursorLocation.Y);
Point v1 = new Point(cursorLocation.X, screen.Bounds.Top);
Point v2 = new Point(cursorLocation.X, screen.Bounds.Bottom);
using (Graphics graphics = Graphics.FromHwnd(NativeMethods.GetDesktopWindow())) {
NativeMethods.SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
graphics.DrawLine(Pens.Red, h1, h2);
graphics.DrawLine(Pens.Red, v1, v2);
}
本机情况下,理论上应在任一显示器上绘制。然而,它只借鉴了主要的。因此,为了解决这个问题,我得到了所有显示器的DC,并尝试这样做。
IntPtr hdc = NativeMethods.CreateDC("DISPLAY", IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
Graphics graphics = Graphics.FromHdc(hdc);
graphics.DrawLine(Pens.Red, h1, h2);
graphics.DrawLine(Pens.Red, v1, v2);
graphics.Dispose();
NativeMethods.ReleaseDC(IntPtr.Zero, hdc);
去想一想,这根本不会显示在屏幕上。我已经尝试了CreateDC的各种重载,以及搜索SO和其他资源,但我被难住了。
一旦这个问题得到解决,有谁知道如何通过使用SHCHangeNotify刷新桌面来消除闪烁?我只画了两条线,它像疯了一样闪烁。)
推荐答案
这不是您问题的答案,但如果您没有问题,我会重新评论尝试使用wpf来解决这个问题。我已经尝试过其他类型的桌面交互,比如透明和WPF,与GDI替代方案相比,WPF速度快得惊人。
您可以放置您的WPF应用程序并调整其大小,以适应您需要在其上绘制的所有区域。然后将其设置为透明,并确保其点击(我认为这是100%透明的默认设置)。这样,只要你在这个大的WPF画布/表单上没有任何东西,所有的鼠标事件都会点击进入桌面。那就开始在上面画画吧。(我喜欢它,因为它很容易为线条和图像添加效果)。保证不闪烁。
或者,您也可以在普通Windows窗体上使用相同的方案。
这样您就不必求助于GDI来完成您的工作。
我认为您现在能够做到无闪烁的唯一方法是挂钩到桌面WM_PAINT上的窗口消息,并在那里进行工作。
这篇关于在多个监视器上绘制所有窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在多个监视器上绘制所有窗口


基础教程推荐
猜你喜欢
- 全局 ASAX - 获取服务器名称 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01