Winamp è stato uno dei primi software popolari a permettere il cosiddetto
"skinning" dell'applicazione, ossia la finestra invece di avere la classica struttura di finestra Windows con in alto la barra del titolo, a destra i 3 pulsanti di chiusura, riduzione a icona e massimizzazione e l'icona con menù in alto a sinistra presenta una grafica diversa e personalizzata intercambiabile.
Per mantenere una certa coerenza e per non creare problemi all'utente finale solitamente il programmatore deve mantenere gli oggetti di cui sopra e gli eventuali eventi che possono ricevere nonostante una diversa grafica (
skin). La barra del titolo infatti se cliccata e trascinata consente lo spostamento della finestra. Ma come fare se creiamo una finestra personalizzata con
Skin che non ha quindi la barra del titolo ? Semplice ci sono delle tecniche apposite di gestione dei click e del movimento del mouse per poter muovere la finestra comunque. Qui vediamo due frammenti di codice
VB.NET e
C# che ci consentono la suddetta operazione.
C#private Point diff;
public Form1()
{
InitializeComponent();
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
diff= new Point(-e.X, -e.Y);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mouse_loc = Control.MousePosition;
mouse_loc.Offset(diff.X, diff.Y);
this.Location = mouse_loc;
}
}
VB.NETPrivate diff As Point
Public Sub New()
InitializeComponent
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
diff = New Point(-e.X, -e.Y)
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
If e.Button = MouseButtons.Left Then
Dim mouse_loc As Point = Control.MousePosition
mouse_loc.Offset(diff.X, diff.Y)
Me.Location = mouse_loc
End If
End Sub