2010-01-25 12 views
10

के गैर-क्लाइंट क्षेत्र का आकार कैसे सेट करें Win32 विंडो (मूल) के गैर-क्लाइंट क्षेत्र का आकार कैसे सेट करें।Win32 विंडो (मूल)

मुझे कैप्टन/TITLE बार थिकर बनाना है।

मैंने पढ़ा है और कहा गया है कि मुझे WM_NCCALCSIZE को संभालना चाहिए लेकिन मुझे दस्तावेज़ पर कुछ भी स्पष्ट नहीं मिल रहा है।

MSDN से:

WM_NCCALCSIZE अधिसूचना


WM_NCCALCSIZE संदेश भेजे जाने के आकार और एक खिड़की के क्लाइंट क्षेत्र की स्थिति की गणना की जानी चाहिए जब। इस संदेश को संसाधित करके, विंडो के आकार या स्थिति में परिवर्तन होने पर एप्लिकेशन विंडो के क्लाइंट क्षेत्र की सामग्री को नियंत्रित कर सकता है।

एक विंडो अपने WindowProc समारोह के माध्यम से इस संदेश को प्राप्त करता है।

wParam तो wParam सही है, यह निर्दिष्ट करता है कि आवेदन का संकेत देना चाहिए जो ग्राहक क्षेत्र का हिस्सा वैध जानकारी शामिल है। सिस्टम नए ग्राहक क्षेत्र के भीतर निर्दिष्ट क्षेत्र में निर्दिष्ट जानकारी की प्रतिलिपि बनाता है। यदि डब्ल्यूपीएआर गलत है, तो एप्लिकेशन को क्लाइंट क्षेत्र के वैध हिस्से को इंगित करने की आवश्यकता नहीं है।

lParam तो wParam सही है, एक NCCALCSIZE_PARAMS संरचना है कि जानकारी एप्लिकेशन को नए आकार और ग्राहक आयत की स्थिति की गणना करने के लिए उपयोग कर सकते हैं करने के लिए lParam अंक। यदि डब्ल्यूपीएआर गलत है, तो एलपीएआरआर एक आरईसीटी संरचना को इंगित करता है। प्रविष्टि पर, संरचना में खिड़की के लिए प्रस्तावित खिड़की आयत शामिल है। बाहर निकलने पर, संरचना में संबंधित विंडो क्लाइंट क्षेत्र के स्क्रीन निर्देशांक होना चाहिए।

+0

क्या आपका मतलब है कि आप पूरी विधवा (गैर-क्लाइंट क्षेत्र समेत) का आकार सेट करना चाहते हैं, या गैर-क्लाइंट मीट्रिक को सीमा की चौड़ाई या शीर्षक पट्टी की ऊंचाई जैसे बदलना चाहते हैं? –

+0

बस संपादित किया गया। मैं कैप्शन बार मोटा बनाना चाहता हूं। –

उत्तर

9

आपने WM_NCCALCSIZE संदेश को संभालने के द्वारा गैर-क्लाइंट क्षेत्र का आकार सेट किया है। लेकिन जब तक आप सभी गैर-क्लाइंट ड्राइंग को WM_NCPAINT

संपादित करें: यहां दो कोड खंड हैं, जो WM_NCCALCSIZE को संभालते हैं और एक साधारण एन पिक्सेल सीमा प्रदान करते हैं, और अन्य DefWindowProc ने डिफ़ॉल्ट हैंडलिंग करने के बाद कुछ अतिरिक्त पिक्सल जोड़े हैं।

case WM_NCCALCSIZE: 
    { 
    lRet = 0; 
    const int cxBorder = 2; 
    const int cyBorder = 2; 
    InflateRect((LPRECT)lParam, -cxBorder, -cyBorder); 
    } 

case WM_NCCALCSIZE: 
    { 
    LPNCCALCSIZE_PARAMS pncc = (LPNCCALCSIZE_PARAMS)lParam; 
    //pncc->rgrc[0] is the new rectangle 
    //pncc->rgrc[1] is the old rectangle 
    //pncc->rgrc[2] is the client rectangle 

    lRet = DefWindowProc (hwnd, WM_NCCALCSIZE, wParam, lParam); 
    pncc->rgrc[0].top += ExtraCaptionHeight; 
    } 

आप DefWindowProc को WM_NCCALCSIZE गुजर और पहले और बाद में NCCALCSIZEPARAM के मूल्यों को देखकर बहुत कुछ सीख सकते हैं।

+0

मैं गैर ग्राहक भाग पेंट करते हैं और WM_NCCALCSIZE के बारे में पता था, दस्तावेज़ पढ़ें लेकिन मैं यह नहीं मिलता है। –

+0

हाँ, यह थोड़ा मुट्ठी भर है। मेरे पास कुछ कोड है जिसे मैंने बहुत समय पहले लिखा था। मैं देखूंगा कि मैं इसे पा सकता हूं या नहीं। –

+0

बहुत बहुत धन्यवाद आदमी। –

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