2009-05-30 29 views
5

Programımda, formumun yeniden boyutlandırılmasını durdurmak için WndProc geçersiz kılma özelliğini kullanıyorum. Şey, işaretçiyi formun kenarına getirdiğinizde imleç hala oradadır. Bu imleci saklamak için zaten var mı?C# Gizle Yeniden Boyutlandır. İmleç

+3

Teşekkür sayesinde bırakılırken, bu yüzden sadece yorum yapma, seni müdahale denediniz WM_NCHITTEST iletisi? Burada daha fazla bilgi: http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx –

cevap

7

Ben Lasse beni gönderen bağlantı WndProc sayesinde kullanarak bir yol bulduk. Cevabınız için teşekkürler Jon ama tam olarak istediğim şey değildi. Bunu test etmedim

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

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

     base.WndProc(ref m); 
    } 

iyice yüzden herhangi yan etkileri varsa biliyorum ama şu anda benim için çalışıyor yoktur: nasıl yaptığımı öğrenmek isteyenler için, bunu kullandım :).

+0

olduğu zaman sınırlanabiliyorsa, ayarlandığında, cevabınızı bulduğunuzda böyle bir şeye cevap vermek üzereydim. Dönüşten sonra ara vermenize gerek yok. –

+0

evet, sağın. alışkanlık kuvveti^_^ – Ozzy

8

Neden FormBorderStyle özelliğini uygun şekilde ayarlamıyorsunuz? Ardından, WndProc'u da kullanmanız gerekmez.

İşte göstermek için bazı örnek kod - Form yeniden boyutlandırılabilir olup olmadığını geçiş yapmak için butonuna tıklayın:

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

Ben yeniden boyutlandırılabilir araç kutusuna ayarladım, çünkü manzarada, o güzel kenarlığı olsun. sabit 3d kullanarak, o sınırı almazsınız (controlBox'u false ve no title olarak ayarlıyorum) – Ozzy

+0

SizeableToolWindow'u kastettiğinizi varsayarsanız, FixedToolWindow'u denediniz mi? Tam olarak aynı görünüyor, sadece yeniden boyutlandırılabilir değil. –

+0

Downvoters: Lütfen açıklayınız, böylece cevap geliştirilebilir. –

0

Sadece FormBorderStyle ayarı bunun için yeterlidir. Bunun için neden WndProc kullanıyorsunuz?

+0

çünkü bu durumda formborderstyle yeterli değildir. – Ozzy

0

@Ozzy/Lasse Benim için çalıştı!

aynı sorunu vardı:

Standart kenarlık stilleri istediğim bir görünüm vermek değil, özel CreateParams yapmak. Yeniden boyutlandırmayı devre dışı bırakmak için Boyut, Minimum Boyut ve Maksimum Boyut için aynı değerleri belirledim. boyutlandırma imleçleri hala ... Bu şimdi WM_NCHITTEST filtreleyerek işlenir Ozzy & Lasse için olsa ben bu test etmedim

İlgili konular