2012-03-06 23 views
11

Tôi bực mình rằng tôi hứa hẹn một cửa sổ cố định mà người dùng không thể thay đổi kích cỡ, nhưng sau đó tất nhiên họ được phép nhấp đúp vào thanh tiêu đề để tối đa hóa cửa sổ 'không thể thay đổi' này. Làm thế nào tôi có thể tắt chức năng này? Tôi có thể làm điều đó với mã winforms, hay tôi phải xuống Win32?Làm cách nào để có thể ngừng nhấp đúp vào thanh tiêu đề cửa sổ để tối đa hóa cửa sổ FormBorderStyle.FixedToolWindow?

Cảm ơn!

Trả lời

26

Bạn có thể thiết lập các MaximizeBox tài sản của các hình thức là false

+1

1 Wow, tôi không nghĩ rằng điều này sẽ làm việc nhưng nó. Tốt đẹp. –

+0

Tôi không nghĩ đến việc này vì nút 'tối đa hóa hộp' có thể nhấp đã bị ẩn trong kiểu đường viền này. –

+2

Không trợ giúp với doubleclick cho tôi – Petr

17

Bạn có thể vô hiệu hóa các thông điệp nhấp đúp vào thanh tiêu đề nói chung (hoặc thay đổi hành vi mặc định được tối đa hóa cửa sổ). nó hoạt động trên bất kỳ FormBorderStyle:

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

Cheers!

+0

1+ cho tác phẩm trong trường hợp nhấp đúp chuột –

8

/// /// Điều này là chúng tôi đang ghi đè quy trình cửa sổ WIN32 cơ sở để ngăn hình thức di chuyển bằng chuột cũng như thay đổi kích thước bằng cách nhấp đúp chuột. /// ///

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+ cho tác phẩm trong trường hợp nhấp đúp –

3

Tôi biết tôi là muộn để đảng, có thể giúp những người đang tìm kiếm giống nhau.

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

Tôi vừa kiểm tra trong VB.Net. Dưới đây mã làm việc cho tôi.

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 

Lưu ý: 163 là mã sự kiện

Các vấn đề liên quan