Home Page Home Page Tips & Tricks Come muovere una finestra senza bordo (borderless) ?

Come muovere una finestra senza bordo (borderless) ?


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#
Codice .NET n°1
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.NET
Codice .NET n°2
Private 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

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