2012-11-25 13 views
8

सबसे पहले यह एमएफसी नहीं है।
यहाँ जीयूआई के एक फसली संस्करण मैं पर काम कर रहा है है:उचित टैब-ऑर्डर और कीबोर्ड इंटरैक्शन (WIN32) के लिए एकाधिक रेडियो बटन समूह कैसे सेट करें?

enter image description here

आप देख सकते हैं मैं (कोशिश की) है कोड का उपयोग कर दो अलग अलग समूह, चिह्न और बटन बनाने के लिए,:

index->hAddT.hwndIndex[2] = CreateWindowEx(NULL,L"BUTTON",L"Icon",WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 
    200,135,120,170,WINDOWHANDLE,(HMENU)IDC_RADIOGROUP,(HINSTANCE)GetWindowLong(WINDOWHANDLE,GWL_HINSTANCE),NULL); 

मेरे पास जो मुद्दा है, और आप शायद क्या देख सकते हैं, यह है कि खिड़की के लिए केवल एक रेडियो बटन है। इसका अर्थ यह है कि उपयोगकर्ता आइकन समूह से एक रेडियो बटन और बटन समूह से संभवतः एक रेडियो बटन का चयन नहीं कर सका। मैं के रूप में इसलिए प्रत्येक रेडियो बटन initialised है

index->hAddT.hwndIndex[3] = CreateWindowEx(NULL,L"BUTTON",L"Information",WS_CHILD | BS_AUTORADIOBUTTON | WS_VISIBLE, 
    205,155,100,20,WINDOWHANDLE,(HMENU)IDC_RADIO1,(HINSTANCE)GetWindowLong(WINDOWHANDLE,GWL_HINSTANCE),NULL);  

मैं चाहते हैं, किसी भी तरह, रेडियो बटन की "आइकन" समूह है, रेडियो बटन के "बटन" समूह से अलग है कि अगर समझ में आता है, और इसलिए प्रत्येक समूह के लिए एक रेडियो बटन उपलब्ध होगा। यह कैसे संभव होगा, क्या मुझे अतिरिक्त रेडियो बटन रखने के लिए एक नई विंडो और एक नई कॉलबैक प्रक्रिया बनाने की आवश्यकता होगी। ऐसे में बच्चों की वस्तुओं को समूहित करने का एक और तरीका होना चाहिए।

2 separate groups of radio buttons in the same form WINAPI (No MFC) लिंक मेरे उद्देश्य के लिए किसी भी उपयोग का नहीं था।

मेरे पास चार्ल्स पेटज़ोल्ड द्वारा संदर्भ के रूप में विंडोज फिफ्थ संस्करण के लिए प्रोग्रामिंग है, और वह ग्रुप बॉक्स अनुभाग में बताता है "ग्रुप बॉक्स अक्सर अन्य बटन नियंत्रणों को घेरने के लिए उपयोग किया जाता है", फिर भी इसका वास्तविक उदाहरण नहीं है।

उत्तर

12

लोकप्रिय राय के विपरीत, आपको किसी समूहबॉक्स नियंत्रण, या किसी अन्य ऐसे बाहरी "कंटेनर" की आवश्यकता नहीं है (जो एक समूह बॉक्स वैसे भी नहीं है, यह सिर्फ एक बटन आर्टिफैक्ट है)। निम्नलिखित वर्णन करता है कि आप समूह-समूह की आवश्यकता के साथ ऐसा कैसे कर सकते हैं। यदि आप एक समूह बॉक्स चाहते हैं जो यहां वर्णित लेआउट में कार्यात्मक रूप से सहायता करता है, तो इस उत्तर के EDIT संपादित करें, जहां मैं समझाता हूं कि ओपी की विशिष्ट इच्छाओं को कैसे प्राप्त किया जा सकता है।

स्वत: रेडियो बटन "बैंकों" दो प्रमुख खिड़की शैली विशेषताओं, WS_GROUP, और WS_TABSTOP का उपयोग करके काम करते हैं।

  1. बैंक 1: अपने दो "बैंकों" जो मैं प्यार से Bank1 और Bank2 बुलाया जाएगा के लिए निम्न कार्य करें तो पहले रेडियो बटन दोनों WS_GROUP होना चाहिए | नियंत्रण शैली में WS_TABSTOP। शेष रेडियो बटनों में या तो उनमें से होना चाहिए, और भाई क्रम में होना चाहिए (जिसका मतलब डायलॉग स्क्रिप्ट में है, वे तुरंत एक-दूसरे का अनुसरण करते हैं; गतिशील सृजन में वे अनुक्रमिक रूप से बनाए जाते हैं)।

  2. पहले बच्चे नियंत्रण के बाद बैंक 1 में आपके अंतिम रेडियो बटन में कम से कम WS_GROUP शैली होनी चाहिए, और WS_GROUP | WS_TABSTOP अगर यह एक टैब-रुक गया नियंत्रण है।

  3. बैंक 2: पहले रेडियो बटन में दोनों WS_GROUP | नियंत्रण शैली में WS_TABSTOP।शेष रेडियो बटनों में या तो उनमें से होना चाहिए, और भाई क्रम में होना चाहिए (जिसका मतलब डायलॉग स्क्रिप्ट में है, वे तुरंत एक-दूसरे का अनुसरण करते हैं; गतिशील सृजन में वे अनुक्रमिक रूप से बनाए जाते हैं)।

  4. के बाद पहले चरण में बैंक 2 में आपके अंतिम रेडियो बटन में कम से कम WS_GROUP शैली होनी चाहिए, और WS_GROUP | WS_TABSTOP अगर यह एक टैब-रुक गया नियंत्रण है।

उपरोक्त की तरह लेआउट आपको रेडियो बटन बैंक में "टैब" करने और चयन स्विच करने के लिए तीर कुंजियों का उपयोग करने की अनुमति देता है। फिर आप उस बैंक को छोड़ने के लिए "टैब" और अगले टैब-स्टॉप पर जाएं। याद रखें, जब आप टैब (या Shift-Tab से पहले) दबाते हैं तो संवाद प्रबंधक हमेशा अगले WS_TABTOP बाल नियंत्रण में स्थानांतरित होगा। यदि नियंत्रण को ऑटो-टाइप किया जाता है तो चयनित नियंत्रण सबसे हालिया WS_GROUP के भीतर 'चयनित' नियंत्रण होगा।

यदि यह मदद करता है, एक स्केच पैड पकड़ो, इसे कागज पर खींचें, और टैब-स्टॉप पर "टी" और ऊपर वर्णित समूह विशेषताओं पर "जी" चिपकाएं। एक बार विज़ुअलाइज्ड होने पर यह शायद अधिक स्पष्ट होगा। अधिक अंतर्दृष्टि के लिए ये कैसे काम करते हैं यह देखने के लिए एक संवाद संसाधन स्क्रिप्ट देखें।

नोट्स: यदि आप इन आसपास के समूह के बक्से का उपयोग करना चाहते हैं तो आप कर सकते हैं। संवाद प्रबंधक WS_GROUP के साथ फ़्लैग किए गए अंतिम नियंत्रण के आधार पर समूहों को नियंत्रण जोड़कर काम करता है, और उसके बाद पहला नियंत्रण है जिसके बाद WS_TABSTOP को उस समूह के लिए टैब-कूद-इन बिंदु माना जाता है। पहले रेडियो बटन (इस समय कोई WS_GROUP) पर WS_TABSTOP के साथ रेडियो बटन नियंत्रण के बाद पहले एक समूहबॉक्स डालना (जो एक टैबस्टॉप नहीं हो सकता है) भी काम करेगा। मुझे आमतौर पर ग्रुपबॉक्स पर निर्भरता के बिना अपने रेडियो बटन व्यवस्थित करना आसान लगता है।

  1. "आइकन" groupbox, WS_GROUP शैली सहित:

    संपादित एक चित्र हज़ारों शब्दों

    अपनी तस्वीर के लिए मैं शायद इस क्रम में निम्नलिखित बच्चों बनाना होगा बोलती है।

  2. "सूचना" ऑटो-रेडियो बटन, जिसमें WS_TABSTOP
  3. अन्य सभी "आइकन" समूह रेडियो बटन शामिल हैं। WS_TABSTOP या WS_GROUP शामिल न करें।
  4. "बटन" समूहबॉक्स, जिसमें WS_GROUP शैली शामिल है। यह वर्तमान नियंत्रण समूह को बंद कर देता है और अगला शुरू करता है।
  5. "abortretryIgnore" ऑटो-रेडियो बटन, जिसमें WS_TABSTOP
  6. अन्य सभी "बटन" समूह रेडियो बटन शामिल हैं। WS_TABSTOP या WS_GROUP शामिल न करें।
  7. "बटन" रेडियो बटन के बाद अगला नियंत्रण WS_GROUP शामिल होना चाहिए। यह वर्तमान नियंत्रण समूह को बंद कर देता है और अगला शुरू होता है।

स्पष्ट रूप से अन्य सभी बाल नियंत्रण शैलियों, दृश्यता, आदि को भी सही ढंग से उपयोग करने की आवश्यकता है, और निश्चित रूप से बच्चों के पास अद्वितीय आईडी होना चाहिए। मुझे लगता है कि आपके पास पहले से ही शेष कवर है।

+0

बोनस पॉइंट यदि आप इसका वर्णन करते हुए एमएसडीएन दस्तावेज को इंगित कर सकते हैं। – Thomas

+0

@ थॉमस एक शाब्दिक पाठ वर्णन करता है कि WS_GROUP कार्यों को संक्षेप में कैसे पाया जा सकता है [यहां] (http://msdn.microsoft.com/en-us/library/aa920781.aspx), लेकिन एक "बेहतर" (और मैं उस शब्द का उपयोग करता हूं संक्षेप में) एमएस से विवरण है [यहां] (http://msdn.microsoft.com/en-us/library/czada357 (v = vs.110) .aspx)। कम से कम उत्तरार्द्ध कुछ उचित स्पष्टता के साथ "तीर कुंजी" अवधारणा प्रस्तुत करता है। – WhozCraig

+0

दुह।क्षमा करें मुझे याद आया [यह एक] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644995 (v = vs.85) .aspx # ws_group) साथ ही, जो शायद सबसे अच्छा है उन सभी को। समग्र दस्तावेज़ में प्रभावशाली संवाद प्रोग्रामिंग पर जानकारी की * टन * है। – WhozCraig

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