2010-08-29 10 views
23

विंडोज 7 में, वॉल्यूम मिक्सर विंडोज़ में एक मोटी, पारदर्शी सीमा के साथ एक विशिष्ट शैली है, लेकिन कोई शीर्षक पट्टी नहीं है। मैं Winforms विंडो में उस विंडो शैली को फिर से कैसे बना सकता हूं?सीमा के साथ एक फॉर्म कैसे बनाएं, लेकिन कोई शीर्षक पट्टी नहीं है? (विंडोज 7 पर वॉल्यूम कंट्रोल की तरह)

volume mixer

मैं string.Empty के लिए पाठ की स्थापना की कोशिश की, और गलत पर ControlBox है, जो शीर्षक पट्टी निकालता है, लेकिन उसके बाद सीमा भी गायब हो जाता है:

border disappears

उत्तर

32
form.Text = string.Empty; 
form.ControlBox = false; 
form.FormBorderStyle = FormBorderStyle.SizableToolWindow; 

एक निश्चित के लिए आकार विंडो, आपको अभी भी FormBorderStyle.SizableToolWindow का उपयोग करना चाहिए, लेकिन आप गैर-क्लाइंट हिट टेस्ट को अनदेखा करने के लिए फॉर्म के WndProc को ओवरराइड कर सकते हैं (जिसका उपयोग साइज़िंग कर्सर पर स्विच करने के लिए किया जाता है):

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

    if (message.Msg == WM_NCHITTEST) 
     return; 

    base.WndProc(ref message); 
} 

तुम सच में आकार लागू करना चाहते हैं, तो आप भी फार्म पर MinimumSize बराबर सेट कर सकते हैं MaximumSize करने के लिए।

+0

नहीं, इस को हटा सीमा पूरी तरह से –

+0

@ oɔɯǝɹ: form.FormBorderStyle = FormBorderStyle.SizableToolWindow मेरे लिए सही ढंग से काम करने लगता है। –

+0

@ oɔɯǝɹ: 'FixedToolWindow' 3 डी सीमा को हटा देता है। 3 डी सीमा बरकरार रखने के साथ निश्चित आकार के व्यवहार के लिए मेरा अद्यतन उत्तर देखें। –

0

form.FormBorderStyle = FormBorderStyle.Fixed3D;

+0

हालांकि यह कोड समस्या को हल करने में मदद कर सकता है, इस सवाल के बारे में अतिरिक्त संदर्भ प्रदान करने के लिए कि क्यों और/या यह प्रश्न का उत्तर कैसे देता है, इसके दीर्घकालिक मूल्य में काफी सुधार होगा। कुछ स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें। –

1

चूंकि "इस संपादन का उद्देश्य पद के लेखक को संबोधित करना था और संपादन के रूप में कोई समझ नहीं आता था। इसे एक टिप्पणी या उत्तर के रूप में लिखा जाना चाहिए था।" मैं क्रिस के जवाब को एक नए उत्तर के रूप में संपादित करता हूं।

उसका उत्तर कोड जैसा वर्णन करता है - सिवाय इसके कि यह किसी क्लाइंट एरिया माउस ईवेंट को भी रोकता है। इसे ठीक करने के लिए आपको 1 (जैसा कि एचटीसीएलआईएनटी में) वापस करने की आवश्यकता है।

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

    if (message.Msg == WM_NCHITTEST) 
    { 
     message.Result = new IntPtr(HTCLIENT); 
     return; 
    } 

    base.WndProc(ref message); 
} 
संबंधित मुद्दे