2009-05-30 15 views
5

In meinem Programm verwende ich die WndProc-Überschreibung, um die Größe meines Formulars zu stoppen. Die Sache ist, der Cursor ist immer noch da, wenn Sie den Zeiger an den Rand des Formulars bewegen. Gibt es den Cursor trotzdem zu verstecken?C# Verstecken Größe ändern Cursor

+3

ich nicht getestet haben, so dass ich nur zu kommentieren, haben Sie versucht, das Abfangen die WM_NCHITTEST Nachricht? Weitere Informationen finden Sie hier: http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx –

Antwort

7

Ich habe einen Weg mit WndProc Dank finden den Link Lasse mich gesandt hat. Danke für deine Antwort Jon aber es war nicht genau das was ich wollte. Für diejenigen, die wissen wollen, wie ich es getan habe, habe ich dies:

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

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

     base.WndProc(ref m); 
    } 

ich es nicht gründlich getestet haben, so weiß nicht, ob es irgendwelche Nebenwirkungen sind, aber es funktioniert gut für mich im Moment :).

+0

ist. Ich war gerade dabei etwas zu beantworten, als du gepostet hast, froh, dass du deine Antwort gefunden hast. Sie brauchen keine Pause nach der Rückkehr. –

+0

ja, dein Recht. Kraft der Gewohnheit^_^ – Ozzy

8

Warum nicht die FormBorderStyle Eigenschaft stattdessen passend einstellen? Dann müssen Sie entweder WndProc nicht verwenden.

Hier einige Beispiel-Code zu zeigen - klicken Sie auf die Taste, um, ob die Form der Größe verändert werden können:

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

Ich habe es auf resizeable toolbox eingestellt, weil in Vista, dass Sie diese schöne Grenze um es bekommen. Wenn Sie fixed 3d verwenden, erhalten Sie diesen Rahmen nicht (ich setze controlBox auf false und keinen Titel) – Ozzy

+0

Angenommen, Sie meinen SizeableToolWindow, haben Sie versucht, FixedToolWindow? Es sieht für mich genau gleich aus, nur nicht veränderbar. –

+0

Downwoters: bitte erklären, damit die Antwort verbessert werden kann. –

0

Nur das Setzen von FormBorderStyle reicht dafür. Warum verwenden Sie WndProc dafür?

+0

weil in diesem Fall formborderstyle nicht genug ist. – Ozzy

0

@Ozzy/Lasse Arbeitete für mich!

hatte das gleiche Problem:

Standard-Rahmenarten nicht geben, das Aussehen ich will, tun benutzerdefinierte CreateParams. Ich habe dieselben Werte für Size, MinimumSize und MaximumSize angegeben, um die Größenänderung zu deaktivieren. Die Größe ändern Cursor wurden noch obwohl gesetzt wird, dank Ozzy & Lasse dies jetzt durch Filtern WM_NCHITTEST ...

behandelt wird

Dank