Metodo 1: chiamare l'API di Windows
È necessario System.Drawing
e System.Runtime.InteropServices
. Potrebbe essere necessario aggiungere loro riferimenti al progetto.
using System.Runtime.InteropServices;
using System.Drawing;
Aggiungi i metodi per la classe con P/Invoke
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc);
ottenere un oggetto Graphics
per l'intero schermo e disegnare un rettangolo con esso:
IntPtr desktopPtr = GetDC(IntPtr.Zero);
Graphics g = Graphics.FromHdc(desktopPtr);
SolidBrush b = new SolidBrush(Color.White);
g.FillRectangle(b, new Rectangle(0, 0, 1920, 1080));
g.Dispose();
ReleaseDC(IntPtr.Zero, desktopPtr);
Il problema con questo il metodo è che se lo schermo si aggiorna, il rettangolo verrà sovrascritto, rendendolo inutilizzabile per la maggior parte delle applicazioni pratiche.
Metodo 2: Creare un modulo senza bordi
Come in precedenza, è necessario un riferimento di progetto. Questa volta per System.Windows.Forms
. Avrete anche bisogno di System.Drawing
ancora:
using System.Drawing;
using System.Windows.Forms;
rendere il nuovo modulo, rimuovere i suoi confini, riempire lo schermo con esso, e metterlo in cima alla barra delle applicazioni:
Form f = new Form();
f.BackColor = Color.White;
f.FormBorderStyle = FormBorderStyle.None;
f.Bounds = Screen.PrimaryScreen.Bounds;
f.TopMost = true;
Application.EnableVisualStyles();
Application.Run(f);
un possibile problema con questo è che l'utente può solo alt + tab lontano dalla finestra. Se vuoi fare una grafica più complicata, dovrai scrivere un codice di disegno come this. Per rendere trasparente lo sfondo del modulo, impostare lo TransparentKey
sullo stesso valore di Backolor
.
Ho appena testato entrambi in .NET 4.5 e Windows 7, quindi potrebbe essere diverso per le versioni precedenti.Maggiori informazioni here e here.
Stai chiedendo un modo per disegnare al di fuori della finestra della console? – Tharwen
@Tharwen yeah intendevo che – user1988147