Upload
gianluca-demichelis
View
82
Download
0
Embed Size (px)
DESCRIPTION
Tutorial sulla creazione di WinForm con forma non rettangolare
Citation preview
Prin
ted
wit
hjo
liprin
t
ildilettanteblogspotcom
Finestre insolite in C
Avreste sempre voluto creare unrsquoapplicazione des-ktop con unrsquointerfaccia un porsquo inusuale Una fines-tra di forma rotonda Bene seguitemi in questo breve tutorial iniziamo a creare unrsquoapplicazione nuova (le screenshot si riferiscono a Visual Studio 2008) File Nuovo Progetto
selezioniamo Applicazione Windows Form Ora ci serve unrsquoimmagine 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 proprietagrave BackgroundImage cari-cando lrsquoimmagine scelta dimensioniamo la form sulla dimensione dellrsquoimmagine Lasciamo la pro-prietagrave BackgroundImageLayout a None (non cedete alla tentazione di impostarla a Stretch ini-birebbe la trasparenza dellrsquoapplicazione a runtime)
25mar2010
Page 1
httpildilettanteblogspotcom201003finestre-inusuali-in-c-windows-formhtml
gldm
Clic
k h
ere
to s
end
you
r fe
edb
ack
Prin
ted
wit
hjo
liprin
t
ildilettanteblogspotcom
Finestre insolite in C
Ora impostiamo la proprietagrave FormBorderStyle a None in questo modo rimuoviamo la barra del ti-tolo ed i bordi della form
Adesso impostiamo la proprietagrave TrasparencyKey al colore di sfondo della form (ovvero nel nostro caso Control)
Lrsquoultimo passo da compiere egrave la gestione del trasci-namento e della chiusura della nostra form aggiun-giamo alle using lrsquoassembly InteropServices using SystemRuntimeInteropServices e incolliamo allrsquointerno della classe il seguente codice public const int WM_NCLBUTTONDOWN = 0xA1 public const int HT_CAPTION = 0x2 [DllImportAttribute(laquouser32dllraquo)] public static extern int SendMessage(IntPtr hWnd int Msg int wParam int lParam) [DllImportAttribute(laquouser32dllraquo)] public static extern bool ReleaseCapture() Infine gestiamo lrsquoevento MouseDown sia per il tras-cinamento della form col tasto sinistro del mouse sia per chiudere lrsquoapplicazione con il tasto destro (ricordiamo che manca la barra del titolo con i pul-santi di chiusura riduzione e ingrandimento) private void Form1_MouseDown(object sender MouseEventArgs e)
25mar2010
Page 2
httpildilettanteblogspotcom201003finestre-inusuali-in-c-windows-formhtml
Clic
k h
ere
to s
end
you
r fe
edb
ack
Prin
ted
wit
hjo
liprin
t
ildilettanteblogspotcom
Finestre insolite in C
if (eButton == MouseButtonsLeft) ReleaseCapture() SendMessage(Handle WM_NCLBUTTONDOWN HT_CAPTION 0) else Close() Abbiamo finito Compiliamo ed eseguiamo lrsquoappli-cazione ecco la nostra finestra dallrsquoaspetto insolito
25mar2010
Page 3
httpildilettanteblogspotcom201003finestre-inusuali-in-c-windows-formhtml
Clic
k h
ere
to s
end
you
r fe
edb
ack
Prin
ted
wit
hjo
liprin
t
ildilettanteblogspotcom
Finestre insolite in C
Ora impostiamo la proprietagrave FormBorderStyle a None in questo modo rimuoviamo la barra del ti-tolo ed i bordi della form
Adesso impostiamo la proprietagrave TrasparencyKey al colore di sfondo della form (ovvero nel nostro caso Control)
Lrsquoultimo passo da compiere egrave la gestione del trasci-namento e della chiusura della nostra form aggiun-giamo alle using lrsquoassembly InteropServices using SystemRuntimeInteropServices e incolliamo allrsquointerno della classe il seguente codice public const int WM_NCLBUTTONDOWN = 0xA1 public const int HT_CAPTION = 0x2 [DllImportAttribute(laquouser32dllraquo)] public static extern int SendMessage(IntPtr hWnd int Msg int wParam int lParam) [DllImportAttribute(laquouser32dllraquo)] public static extern bool ReleaseCapture() Infine gestiamo lrsquoevento MouseDown sia per il tras-cinamento della form col tasto sinistro del mouse sia per chiudere lrsquoapplicazione con il tasto destro (ricordiamo che manca la barra del titolo con i pul-santi di chiusura riduzione e ingrandimento) private void Form1_MouseDown(object sender MouseEventArgs e)
25mar2010
Page 2
httpildilettanteblogspotcom201003finestre-inusuali-in-c-windows-formhtml
Clic
k h
ere
to s
end
you
r fe
edb
ack
Prin
ted
wit
hjo
liprin
t
ildilettanteblogspotcom
Finestre insolite in C
if (eButton == MouseButtonsLeft) ReleaseCapture() SendMessage(Handle WM_NCLBUTTONDOWN HT_CAPTION 0) else Close() Abbiamo finito Compiliamo ed eseguiamo lrsquoappli-cazione ecco la nostra finestra dallrsquoaspetto insolito
25mar2010
Page 3
httpildilettanteblogspotcom201003finestre-inusuali-in-c-windows-formhtml
Clic
k h
ere
to s
end
you
r fe
edb
ack
Prin
ted
wit
hjo
liprin
t
ildilettanteblogspotcom
Finestre insolite in C
if (eButton == MouseButtonsLeft) ReleaseCapture() SendMessage(Handle WM_NCLBUTTONDOWN HT_CAPTION 0) else Close() Abbiamo finito Compiliamo ed eseguiamo lrsquoappli-cazione ecco la nostra finestra dallrsquoaspetto insolito
25mar2010
Page 3
httpildilettanteblogspotcom201003finestre-inusuali-in-c-windows-formhtml
Clic
k h
ere
to s
end
you
r fe
edb
ack