私は、単一のモニタ上に描画するには、次のコードを使用しています:複数のモニタ上のすべてのウィンドウの上に描画
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つの線を描くだけで、それは狂ったようにちらつきます。)
あなたのコードはそのままでコンパイルされません - あなたのグラフィックオブジェクトは、「グラフィック」という名前が、後で、あなたは「グラム」として使用されます。 – BrainSlugs83
Graphics.FromHwnd(hdc)は、 "\\。DISPLAY1"から作成されたhdcと、EnumDisplayDevicesによって返された文字列によって作成された非ゼロのdcsのすべてについて、私のためにOutOfMemoryExceptionをスローします。 – BrainSlugs83