25 mar 2010

Finestre insolite in C#

Avreste sempre voluto creare un'applicazione desktop con un'interfaccia un po' inusuale? Una finestra di forma rotonda? Bene, seguitemi in questo breve tutorial: iniziamo a creare un'applicazione nuova (le screenshot si riferiscono a Visual Studio 2008):
File / Nuovo / Progetto


selezioniamo Applicazione Windows Form.

Ora ci serve un'immagine da usare come sfondo della nostra finestra: nel nostro esempio scegliamo una PNG con sfondo trasparente:


Torniamo a Visual Studio: sulla form principale, impostiamo la proprietà BackgroundImage caricando l'immagine scelta; dimensioniamo la form sulla dimensione dell'immagine. Lasciamo la proprietà BackgroundImageLayout a None (non cedete alla tentazione di impostarla a Stretch: inibirebbe la trasparenza dell'applicazione a runtime).


Ora impostiamo la proprietà FormBorderStyle a None, in questo modo rimuoviamo la barra del titolo ed i bordi della form.


Adesso impostiamo la proprietà TrasparencyKey al colore di sfondo della form (ovvero, nel nostro caso, Control):

L'ultimo passo da compiere è la gestione del trascinamento e della chiusura della nostra form: aggiungiamo alle using l'assembly InteropServices:
using System.Runtime.InteropServices;

...e incolliamo all'interno della classe il seguente codice:
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();

Infine gestiamo l'evento MouseDown, sia per il trascinamento della form col tasto sinistro del mouse, sia per chiudere l'applicazione con il tasto destro (ricordiamo che manca la barra del titolo, con i pulsanti di chiusura, riduzione e ingrandimento):
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
 if (e.Button == MouseButtons.Left)
 {
   ReleaseCapture();
   SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
 }
 else
 {
   Close();
 }
}

Abbiamo finito! Compiliamo ed eseguiamo l'applicazione: ecco la nostra finestra dall'aspetto insolito...

Nessun commento:

Posta un commento