Come fare una finestra che non dispone di una mossa Barra del titolo
Domanda
Esiste un controllo che può spostare la finestra senza la barra del titolo (in alto) / Nessuna cornice a tutti.
sto facendo un'applicazione nota come sapete quindi voglio che sia compatta.
Soluzione
È necessario tornare HTCAPTION dal WM_NCHITTEST nel WndProc:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
const int WM_NCHITTEST = 0x0084;
const int HTCLIENT = 1;
const int HTCAPTION = 2;
protected override void WndProc(ref Message msg)
{
base.WndProc(ref msg);
if (msg.Msg == WM_NCHITTEST && msg.Result == (IntPtr)HTCLIENT)
{
msg.Result = (IntPtr)HTCAPTION;
}
}
}
Che farà l'area client della finestra sembra di Windows per essere una barra del titolo.
Altri suggerimenti
ho scritto un componente di farlo, si può trovare qui .
Può essere utilizzato per spostare alcun controllo, non solo una finestra. È possibile utilizzare esplicitamente nel codice, o semplicemente cadere sulla superficie progettista e impostare la proprietà EnableDragMove
sulla finestra o il controllo, come illustrato di seguito:
Dopo aver tentato qualcosa di simile prima vi posso dire che non è particolarmente facile. Quello che è necessario fare è previsto su un / OnMouseMove / OnMouseUp evento OnMouseDown alla forma stessa (o un certo controllo nella forma) che aggiorna la posizione del controllo quando l'utente fa clic e trascina. A mia conoscenza non c'è costruito in controllo che vi permetterà di fare clic e trascinare una finestra diversa da quella del titolo.
Se avete intenzione di costruire un'applicazione da zero mi sento di raccomandare la creazione utilizzando WPF.
Todd Miranda ha una grande dimostrazione di creazione di un gadget come l'applicazione sopra a windowsclient.net.
Link alla manifestazione: http://windowsclient.net/learn/video. aspx? v = 5177