次のコードを使用して、単一のモニターに描画しています。
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 を使用してデスクトップを更新することでちらつきをなくす方法を知っている人はいますか? 私は2本の線を描いているだけで、狂ったようにちらつきます..)