2009-05-30 12 views
5

W moim programie, im przy użyciu przesłonięcia WndProc, aby zatrzymać zmianę rozmiaru mojego formularza. Rzecz w tym, że kursor nadal istnieje, gdy przesuniesz wskaźnik na krawędź formularza. Czy mimo to ukryć ten kursor?C# Hide Resize Cursor

+3

Nie testowałem tego, więc ja tylko komentowanie, czy próbowałeś przechwytując komunikat WM_NCHITTEST? Więcej informacji tutaj: http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx –

Odpowiedz

7

znalazłem sposób przy użyciu WndProc dzięki link Lasse mię posłał. Dziękuję za odpowiedź Jon, ale nie było to dokładnie to, czego chciałem. Dla tych, którzy chcą wiedzieć, jak to zrobiłem, użyłem to:

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

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

     base.WndProc(ref m); 
    } 

nie mam go dokładnie testowane, więc nie wiem, czy są jakieś skutki uboczne, ale to działa dobrze dla mnie w tej chwili :).

+0

Już miałem odpowiedzieć na coś takiego, kiedy napisałeś, cieszę się, że znalazłeś odpowiedź. Po powrocie nie potrzebujesz przerwy. –

+0

tak, twoje prawo. siła nawyku^_^ – Ozzy

8

Dlaczego nie ustawić odpowiednio właściwości FormBorderStyle? Wtedy nie musisz używać WndProc.

Oto niektóre przykładowy kod do wykazania - kliknij przycisk, aby przełączyć czy forma może być zmieniany:

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

Mam go ustawionego na toolbox z możliwością zmiany rozmiaru, ponieważ w widoku tym otaczają go ładne ramki. używając fixed 3d, nie dostajesz tej granicy (ustawiam ControlBox na false i bez tytułu) – Ozzy

+0

Zakładając, że masz na myśli SizeableToolWindow, czy wypróbowałeś FixedToolWindow? Wygląda dokładnie tak samo, po prostu nie można zmienić rozmiaru. –

+0

Downvoters: proszę wyjaśnić, więc odpowiedź można poprawić. –

0

Wystarczy ustawić FormBorderStyle wystarczy do tego. Dlaczego używasz WndProc do tego?

+0

, ponieważ w tym przypadku formborderstyle to za mało. – Ozzy

0

@Ozzy/Lasse Pracowałem dla mnie!

miał ten sam problem:

Standardowe stylów obramowania nie dają wygląd chcę, niestandardowe CreateParams zrobić. Podałem te same wartości dla Rozmiar, MinimumSize i MaximumSize, aby wyłączyć zmianę rozmiaru. Kursory Resize nadal ustawiony jest jednak, dzięki Ozzy & Lasse to jest teraz obsługiwane przez filtrowanie WM_NCHITTEST ...

Dzięki