2009-05-30 8 views
5

Nel mio programma, im utilizzando l'override di WndProc per interrompere il ridimensionamento del modulo. Il fatto è che il cursore è ancora lì quando sposti il ​​puntatore sul bordo del modulo. Esiste comunque la possibilità di nascondere questo cursore?C# Nascondere il cursore di ridimensionamento

+3

non ho ancora testato questo, quindi sto solo commentando, avete provato intercettando il messaggio WM_NCHITTEST? Maggiori informazioni qui: http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx –

risposta

7

ho trovato un modo utilizzando WndProc grazie al link Lasse mi ha mandato. Grazie per la tua risposta, Jon, ma non era esattamente quello che volevo. Per chi vuole sapere come ho fatto, ho usato questo:

protected override void WndProc(ref Message m) 
    { 
     const int WM_NCHITTEST = 0x0084; 

     switch (m.Msg) 
     { 
      case WM_NCHITTEST: 
       return; 
     } 

     base.WndProc(ref m); 
    } 

non ho ancora testato a fondo in modo da non so se ci sono effetti collaterali, ma funziona bene per me in questo momento :).

+0

Stavo per rispondere a qualcosa del genere quando hai postato, felice che tu abbia trovato la tua risposta. Non hai bisogno di una pausa dopo il ritorno però. –

+0

sì, la tua destra. forza dell'abitudine^_^ – Ozzy

8

Perché non impostare la proprietà FormBorderStyle in modo appropriato? Quindi non è necessario utilizzare WndProc.

Ecco alcuni esempi di codice per dimostrare - fare clic sul pulsante per attivare o meno il modulo può essere ridimensionato:

using System; 
using System.Windows.Forms; 
using System.Drawing; 

class Test 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     Button button = new Button 
     { 
      Text = "Toggle border", 
      AutoSize = true, 
      Location = new Point(20, 20) 
     }; 
     Form form = new Form 
     { 
      Size = new Size (200, 200), 
      Controls = { button }, 
      FormBorderStyle = FormBorderStyle.Fixed3D 
     }; 
     button.Click += ToggleBorder; 
     Application.Run(form); 
    } 

    static void ToggleBorder(object sender, EventArgs e) 
    { 
     Form form = ((Control)sender).FindForm(); 
     form.FormBorderStyle = form.FormBorderStyle == FormBorderStyle.Fixed3D 
      ? FormBorderStyle.Sizable : FormBorderStyle.Fixed3D; 
    } 
} 
+0

ho impostato su strumenti ridimensionabili perché in vista, si ottiene quel bel bordo intorno ad esso. usando fisso 3d, non ottieni quel bordo (ho impostato controlBox su false e nessun titolo) – Ozzy

+0

Supponendo che tu intenda SizeableToolWindow, hai provato FixedToolWindow? Sembra esattamente lo stesso per me, solo non ridimensionabile. –

+0

Downvoters: per favore spiega, quindi la risposta può essere migliorata. –

0

Basta impostare FormBorderStyle per questo. Perché stai usando WndProc per questo?

+0

perché in questo caso formborderstyle non è sufficiente. – Ozzy

0

@Ozzy/Lasse Ha funzionato per me!

avuto lo stesso problema: stili di confine

standard non danno l'aspetto che voglio, CreateParams personalizzati fare. Ho specificato gli stessi valori per Size, MinimumSize e MaximumSize per disabilitare il ridimensionamento. I cursori di ridimensionamento erano ancora fissati, però, grazie a Ozzy & Lasse questo viene ora gestita filtrando WM_NCHITTEST ...

Grazie

Problemi correlati