J'utilise le code suivant pour dessiner sur un seul moniteur:Dessin sur toutes les fenêtres sur plusieurs moniteurs
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);
}
Natively, ce devrait théoriquement tirage de chaque moniteur. Cependant, il ne s'appuie que sur le primaire. Donc, pour résoudre ce problème, je reçois le DC de tous les écrans et j'essaie de le faire de cette façon.
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);
Go figure, cela ne même pas dessiner à l'écran du tout. J'ai essayé différentes surcharges pour CreateDC, ainsi que la recherche de SO et d'autres ressources et je suis perplexe.
fois ce problème résolu, quelqu'un sait comment se débarrasser de scintillement en actualisant le bureau en utilisant SHChangeNotify? Je dessine seulement deux lignes et ça scintille comme un fou ..)
Votre code ne compile pas-est - votre objet graphique est nommé "graphiques", mais plus tard, vous l'utiliser comme "g". – BrainSlugs83
Graphics.FromHwnd (hdc) déclenche une exception OutOfMemoryException pour moi - à la fois pour un hdc créé à partir de "\\. DISPLAY1", et sur tous les dcs non-zéro créés par des chaînes renvoyées par EnumDisplayDevices ... – BrainSlugs83