gpt4 book ai didi

c# - 在多个显示器上绘制所有窗口

转载 作者:太空狗 更新时间:2023-10-30 01:28:23 24 4
gpt4 key购买 nike

我正在使用以下代码在单个显示器上绘图:

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 刷新桌面来消除闪烁吗?我只画了两条线,它像疯了一样闪烁..)

最佳答案

这对我有用。我使用 EnumDisplayDevices 来获取名称。

[DllImport("gdi32.dll")]
public static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData);

var hdc = CreateDC(@"\\.\DISPLAY1", "", "", IntPtr.Zero);
Graphics g = Graphics.FromHdc(hdc);
var pt = Cursor.Position;
g.DrawEllipse(Pens.BlueViolet, pt.X - 100, pt.Y - 100, 200, 200);

更多信息在这里: http://msdn.microsoft.com/en-us/library/windows/desktop/dd145179(v=vs.85).aspx

关于c# - 在多个显示器上绘制所有窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/695897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com