Usare GDI senza progetto winform

venerdì 08 maggio 2009 - 15.13

FBSC Profilo | Newbie

Salve a tutti :D avrei biaogno di usare le librerie System.Drawing senza dover disegnare dentro ad un controllo Winform. Come posso fare? grazie in anticipo

Jeremy Profilo | Guru

Ciao Francesco.
Non credo di aver capito molto bene la tua richiesta.

Se ti riferisci al fatto di poter creare o meno un oggetto Graphics, la risposta è si.

Private graphics as new Syste.Drawing.Graphics

Facci sapere...
Ciao

FBSC Profilo | Newbie

Probabilmente mi sono spiegato male Ho bisogno di usare le GDI ma, a quanto a ho capito, si possono usare solo su un controllo WinForm. Io però avrei bisogno di utilizzarle in un progetto console, fuori da un form. Grazie in anticipo

miniBill Profilo | Newbie

puoi creare un oggetto Graphics associandolo ad un'immagine
Graphics.FromImage(new Bitmap(500,600))

FBSC Profilo | Newbie

ho provato e non disegna Grazie lo stesso

miniBill Profilo | Newbie

vuoi disegnare dove?

FBSC Profilo | Newbie

Dovrei disegnare sullo schermo, direttamente sullo schermo... anche con un Winform non fa disegnare fuori da esso quindi...

miniBill Profilo | Newbie

mi sa che ti tocca usare le api di windows per disegnare direttamente a schermo, o le directx

FBSC Profilo | Newbie

Azz temevo questa risposta Grazie lo stesso a tutti

miniBill Profilo | Newbie

potresti provare a ottenere l'handle di eplorer.exe e disegnare lì, ma al primo refresh, saresti da capo.
Creare un form semitrasparente?

FBSC Profilo | Newbie

mm no... mi serve in console... mi scoccierebbe farlo a mano il form

aiedail92 Profilo | Expert

Ciao

Puoi usare sfruttare la classe Graphics appoggiandoti solo a 2 API di Windows: la GetDC e la ReleaseDC. Una volta che hai ottenuto l'handle di un Device Context creato con GetDC, ottieni l'oggetto Graphics col metodo Graphics.FromHdc, quindi puoi usarlo come se fosse un Graphics di una finestra qualsiasi. Quando hai finito di usare il Graphics, chiami il metodo Dispose (o ancora meglio includi la dichiarazione in una using) e rilasci l'handle del DC con ReleaseDC:

[DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hwnd); [DllImport("user32.dll")] private static extern bool ReleaseDC(IntPtr hwnd, IntPtr hdc); /// <summary> /// Punto di ingresso principale dell'applicazione. /// </summary> [STAThread] static void Main() { //Ottieni il Device Context per disegnare sullo schermo intero //Se al posto di IntPtr.Zero metti l'handle di una finestra, //ottieni il DC per disegnare su di essa IntPtr hdc = GetDC(IntPtr.Zero); //Crei il Graphics dal Device Context dello schermo using (Graphics g = Graphics.FromHdc(hdc)) { //Esegui le operazioni di disegno //Sostituisci con quello che devi fare tu Pen p = new Pen(Brushes.Black); Random r = new Random(); int w = (int)g.VisibleClipBounds.Width; int h = (int)g.VisibleClipBounds.Height; for (int i = 0; i < 10000; i++) { g.DrawLine(p, r.Next(0, w), r.Next(0, h), r.Next(0, w), r.Next(0, h)); } } //Rilascia l'HDC ottenuto con GetDC ReleaseDC(IntPtr.Zero, hdc); }

Luca

FBSC Profilo | Newbie

Wow Grazie mille :D:D
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5