2012-03-06 18 views
11

मुझे नाराज है कि मुझे एक निश्चित खिड़की का वादा किया गया है जिसे उपयोगकर्ता आकार बदल नहीं सकता है, लेकिन फिर निश्चित रूप से उन्हें इस 'अनजान' विंडो को अधिकतम करने के लिए शीर्षक पट्टी पर डबल क्लिक करने की अनुमति है। मैं इसे कैसे बंद कर सकता हूं? क्या मैं इसे Winforms कोड के साथ कर सकता हूं, या मुझे Win32 पर जाना चाहिए?FormBorderStyle.FixedToolWindow की एक विंडो को अधिकतम करने से मैं विंडो शीर्षक पट्टी के डबल क्लिक को कैसे रोक सकता हूं?

धन्यवाद!

उत्तर

26

आप झूठी

+1

+1 वाह है मुझे नहीं लगता था कि यह काम होगा, लेकिन यह करता है। अच्छा लगा। –

+0

मैंने ऐसा करने के लिए नहीं सोचा था, क्योंकि इस सीमावर्ती में क्लिक करने योग्य 'अधिकतम बॉक्स' बटन पहले ही छिपा हुआ था। –

+2

मेरे लिए डबलक्लिक के साथ मदद न करें – Petr

17

को फार्म के MaximizeBox संपत्ति सेट कर सकते हैं आप सामान्य रूप में एक शीर्षक पट्टी पर डबल क्लिक करें संदेश निष्क्रिय कर सकते हैं (या डिफ़ॉल्ट व्यवहार जो विंडो को विस्तृत करने का तरीका बदलने)। यह किसी भी 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

चीयर्स!

+0

1+ डबल क्लिक परिदृश्य में काम के लिए –

8

/// /// यह हम माउस द्वारा स्थानांतरित होने से माउस को स्थानांतरित करने के साथ-साथ माउस डबल क्लिक द्वारा आकार बदलने से रोकने के लिए बेस WIN32 विंडो प्रक्रिया को ओवरराइड कर रहे हैं। /// ///

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+ डबल क्लिक परिदृश्य में काम के लिए –

3

मैं जानता हूँ कि मैं पार्टी के लिए देर हो रही है, जो एक ही खोज कर रहा है किसी की मदद कर सकते हैं।

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

मैंने इसे अभी VB.Net में चेक किया है। नीचे कोड मेरे लिए काम किया।

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 

नोट: 163, घटना कोड

संबंधित मुद्दे