2012-03-06 12 views
11

Kullanıcının yeniden boyutlandıramayacağı sabit bir pencere vaat ettiğimden rahatsızlık duyuyorum, ancak tabiki bu 'taranamaz' pencereyi en üst düzeye çıkarmak için başlık çubuğunu çift tıklatmalarına izin verilir. Bunu nasıl kapatabilirim? Winforms koduyla yapabilir miyim, yoksa Win32'a mı gitmeliyim?FormBorderStyle.FixedToolWindow penceresini en üst düzeye çıkarmak için pencere başlık çubuğunun çift tıklamasını nasıl durdurabilirim?

Teşekkürler!

cevap

26

Sen genel bir başlık çubuğunda çift tıklama mesajı devre dışı bırakabilir yanlış

+1

1 Vay olduğunu. Güzel. –

+0

Bunu yapmayı düşünmüyordum, çünkü tıklanabilir 'maksimize kutusu' düğmesi bu borderstyle'da zaten gizliydi. –

+2

Benim için doubleclick yardımcı olmayın – Petr

17

formun MaximizeBox özelliğini ayarlayın (veya pencereyi maksimize varsayılan davranışını değiştirmek) olabilir. herhangi FormBorderStyle çalışır:

private const int WM_NCLBUTTONDBLCLK = 0x00A3; //double click on a title bar a.k.a. non-client area of the form 

     protected override void WndProc(ref Message m) 
     { 
      if (m.Msg == WM_NCLBUTTONDBLCLK) 
      { 
       m.Result = IntPtr.Zero; 
       return; 
      } 
      base.WndProc(ref m); 
     } 

MSDN Source

Şerefe!

+0

1+ çalışmadığında işe yaramaz –

8

/// Bu, formun fare tarafından taşınmasının yanı sıra fare çift tıklama ile yeniden boyutlandırılmasını önlemek için WIN32 temel yordamı temelini oluşturuyor. Hatta biraz da geç partiye biliyorum /// ///

protected override void WndProc(ref Message m) 
    { 
     const int WM_SYSCOMMAND = 0x0112; 
     const int SC_MOVE = 0xF010; 
     const int WM_NCLBUTTONDBLCLK = 0x00A3; //double click on a title bar a.k.a. non-client area of the form 

     switch (m.Msg) 
     { 
      case WM_SYSCOMMAND:    //preventing the form from being moved by the mouse. 
       int command = m.WParam.ToInt32() & 0xfff0; 
       if (command == SC_MOVE) 
        return; 
       break; 
     } 

     if(m.Msg== WM_NCLBUTTONDBLCLK)  //preventing the form being resized by the mouse double click on the title bar. 
     { 
      m.Result = IntPtr.Zero;     
      return;     
     } 

     base.WndProc(ref m); 
    } 
+0

1+ çalışmalarında kullanılmak üzere, –

3

aynı aradığı birine yardım etsin.

private const int WM_NCLBUTTONDBLCLK = 0x00A3; //double click on a title bar a.k.a. non-client area of the form 

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 

    switch (msg) 
    {     
     case WM_NCLBUTTONDBLCLK: //preventing the form being resized by the mouse double click on the title bar. 
      handled = true; 
      break;     
     default: 
      break; 
    } 
    return IntPtr.Zero; 
} 
1

Sadece VB.Net'de kontrol ettim. Aşağıdaki kod benim için çalıştı.

Private Const Win_FormTitleDoubleClick As Integer = 163 

Protected Overrides Sub WndProc(ByRef m As Message) 
    If m.Msg = Win_FormTitleDoubleClick Then 
     m.Result = IntPtr.Zero 
     Return 
    End If 
    MyBase.WndProc(m) 
End Sub 

Not: 163 İşe yarayacağını sanmıyordum ama yok, olay kodu

İlgili konular