2016-01-15 12 views
9

मैं एक EDIT नियंत्रण बनाने के लिए इस लाइन का उपयोग करें:मैं देशी विंडोज नियंत्रणों का सही आकार कैसे प्राप्त करूं?

hMyEdit = CreateWindowEx(
    WS_EX_CLIENTEDGE, 
    L"EDIT", 
    L"", 
    WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT, 
    10, 
    10, 
    200, 
    25, 
    hParentWnd, 
    (HMENU)IDC_MY_EDIT, 
    hInst, 
    NULL 
); 

इसे करने के लिए अगले, वहाँ है एक COMBOBOX:

hMyCombo = CreateWindowEx(
    WS_EX_CLIENTEDGE, 
    L"COMBOBOX", 
    L"", 
    WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | WS_VSCROLL | ES_LEFT | CBS_DROPDOWNLIST| CBS_HASSTRINGS, 
    220, 
    10, 
    90, 
    200, 
    hParentWnd, 
    (HMENU)IDC_MY_COMBO, 
    hInst, NULL 
); 

दो समस्याएं हैं मैं समझ नहीं कर सकते हैं:

  1. अगर मैं अपने COMBOBOX की ऊंचाई (वर्तमान में 200) को कम करने, यह भी वास्तविक की अधिकतम ऊंचाई की सीमा ड्राॅप डाउन लिस्ट। हालांकि, नियंत्रण की वास्तविक ऊंचाई के बिना ड्रॉपडाउन सूची बिल्कुल प्रभावित नहीं होती है। क्या COMBOBOX ड्रॉपडाउन सूची के लिए दी गई ऊंचाई से अधिक का उपयोग नहीं करना चाहिए?

  2. मैं अपने EDIT को अपने COMBOBOX नियंत्रण के टेक्स्ट फ़ील्ड के समान ऊंचाई कैसे नियंत्रित कर सकता हूं?

मैं डिफ़ॉल्ट आकारों के बारे में कोई दस्तावेज नहीं ढूंढ पाया, लेकिन मुझे उम्मीद है कि आकार नियंत्रण के लिए एक उचित तरीका है।

यह कुल मिलाकर, मेरे प्रश्न हैं:

  1. कौन सा ऊंचाई मैं अपने COMBOBOX पर लागू होना चाहिए ड्रॉपडाउन सूची जहाँ तक आवश्यक विस्तार करने के लिए अनुमति देने के लिए?

  2. कौन सा ऊंचाई मैं अपने EDIT पर लागू होते हैं COMBOBOX और EDIT नियंत्रण के पाठ क्षेत्र के लिए एक ही ऊंचाई के लिए करना चाहिए?

+0

कंबोबॉक्स यौगिक नियंत्रण है। बच्चे (WS_CHILD) नियंत्रण हैं - आप उनका आकार प्राप्त कर सकते हैं। 'GetWindow' और' GW_CHILD' देखें। – i486

+0

धन्यवाद, @ i486! क्या आप मेरे सवालों के साथ मेरी मदद कर सकते हैं? –

+0

संसाधन फ़ाइल के साथ एक संवाद बॉक्स में समान नियंत्रण बनाएँ। फिर उनके वास्तविक आकार को पढ़ें (यह दूसरे प्रश्न के लिए है)। ध्यान दें कि विभिन्न विंडोज संस्करणों या स्क्रीन योजनाओं/डीपीआई आकार पर नियंत्रण बहुत अलग दिख सकते हैं। – i486

उत्तर

5

व्यवहार शैली आप बता गया के लिए चुना पर निर्भर करता है।यदि यह CBS_SIMPLE है तो ऊंचाई nHeight तर्क द्वारा निर्धारित की जाती है जिसे आप CreateWindowEx() पर पास करते हैं। लेकिन अगर यह CBS_DROPDOWN/LIST है तो nHeight ड्रॉपडाउन सीमा निर्धारित करता है और यह स्वयं से पता चलता है कि टेक्स्टबॉक्स भाग की ऊंचाई क्या होनी चाहिए। फ़ॉन्ट के आधार पर, WM_SETFONT भेजने से ऊंचाई बदल जाती है।

ड्रॉपबॉक्स सूची को यथासंभव विस्तार करने की अनुमति देने के लिए मुझे अपने कॉम्बोबॉक्स पर किन ऊंचाई पर लागू होना चाहिए?

यह पूरी तरह से आपके ऊपर है। एक सौहार्दपूर्ण विकल्प कम से कम ~ 8 आइटम दिखाना है। अपने माता-पिता के ग्राहक क्षेत्र में combobox के स्थान पर विचार करें। आप आम तौर पर माता-पिता के अंदर रहने वाली ड्रॉपडाउन सूची का पक्ष लेते हैं। लेकिन यह हमेशा व्यावहारिक नहीं है, अगर combobox खिड़की के निचले भाग के पास है तो आपके पास कोई विकल्प नहीं है बल्कि इसे माता-पिता के नीचे से आगे बढ़ने दें। प्रयोज्य समस्या से सावधान रहें जो इसका कारण बनता है, यदि पैरेंट विंडो डेस्कटॉप के नीचे स्थित है तो सूची पूरी तरह से दिखाई नहीं देगी।

कॉम्बोबॉक्स और ईडीआईटी नियंत्रण के टेक्स्ट फ़ील्ड के लिए समान ऊंचाई रखने के लिए मुझे अपनी EDIT पर किन ऊंचाई पर लागू होना चाहिए?

यह यूआई डिजाइनरों को बहुत अच्छी तरह से चलाने के लिए प्रेरित करता है, जब आप इन नियंत्रणों को एक ही फ़ॉन्ट देते हैं तो आप एक ही ऊंचाई नहीं प्राप्त कर सकते हैं। Combobox दो पिक्सल लंबा होगा। हालांकि पाठ ठीक से संरेखित करता है। अजीब quirk और मेरे पास इसके लिए बहुत अच्छी व्याख्या नहीं है, 30 साल के एपकोम्पेट रिवर्स-इंजीनियर के लिए मुश्किल हो सकता है। मुझे लगता है कि इसमें CBS_DROPDOWNLIST शैली में प्रदर्शित फ़ोकस आयताकार के लिए आवश्यक स्थान के साथ कुछ करना है। आप फ़ॉन्ट के साथ टिंकर कर सकते हैं, combobox को जानबूझकर छोटे फ़ॉन्ट दे सकते हैं लेकिन यह बहुत अच्छा नहीं दिखता है। Anyhoo, एक ही फ़ॉन्ट में combobox और टेक्स्टबॉक्स प्रदर्शित पाठ सुनिश्चित करने के लिए WM_SETFONT का उपयोग करें।

+0

धन्यवाद, मुझे एक और आधुनिक जीयूआई ढांचे पर स्विच करने पर विचार करना होगा। –

0

COMBOBOX ड्रॉपडाउन सूची के लिए दिए गए ऊंचाई की तुलना में अधिक उपयोग करने के लिए नहीं माना जाता है?

नहीं, जब सामग्री सूची बॉक्स के अंदर फिट नहीं होती है तो स्क्रॉलबार दिखाई देगा। और स्क्रॉलबार को हमेशा दिखाई देने के लिए मजबूर करने के लिए आप CBS_DISABLENOSCROLL भी जोड़ सकते हैं।

मैं कैसे कर सकते हैं मेरी EDIT मेरी COMBOBOX नियंत्रण के पाठ क्षेत्र के रूप में ही ऊंचाई को नियंत्रित?

संपादित करें:

COMBOBOXINFO cbi; 
cbi.cbSize = sizeof(cbi); 
GetComboBoxInfo(hMyCombo, &cbi); 
GetWindowRect(cbi.hwndCombo, &r); 

अब ऊंचाई r.bottom - r.top है: उपयोग GetComboBoxInfo कॉम्बो बॉक्स के संपादित भाग के हैंडल (अन्य बातों के अलावा) प्राप्त करने के लिए, तो GetWindowRect करने के लिए उपयोग अपने आयत हो जाता है और यह मेरे परीक्षण पर 24 लौटा, जो प्रयोगात्मक रूप से 25 के करीब है। उसने कहा, डायलॉग बॉक्स का उपयोग करना आसान है। आप CreateDialogIndirect फ़ंक्शन का उपयोग कर संसाधन से गतिशील रूप से एक संवाद बॉक्स बना सकते हैं।

+0

मैंने 'cbi' के' rcItem' फ़ील्ड का उपयोग करके पिछला जवाब दिया है और फिर 'AdjustWindowRect' को स्टाइल को ध्यान में रखकर' और कॉम्बो बॉक्स के संपादन नियंत्रण की पूर्व शैलियों, लेकिन 'GetWindowRect' के साथ यह नया संस्करण वास्तव में सरल है। – mikedu95

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

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