2012-01-18 10 views
7

मेरा तत्काल संदर्भ विंडोज प्लेटफ़ॉर्म है, हालांकि मैं एक और गुई होस्ट के लिए ui पर काम करते समय भी यही प्रश्न पूछ सकता हूं। मैं एटीएल/एमएफसी के बिना, काफी सादा सी ++ winapi में काम कर रहा हूँ। मुझे ग्लोबल्स का उपयोग करने में कोई दिलचस्पी नहीं है, बल्कि "एप्लिकेशन" डेटा के साथ "विंडो" संबंधित कार्यों को निष्पादित करने के लिए एक और अधिक स्वीकार्य अभ्यास है।विंडो क्लास से एप्लिकेशन चरों तक पहुंचने का उचित/स्वीकार्य डिज़ाइन क्या है?

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

मेरे एप्लिकेशन क्लास में विंडो सदस्य हैं। क्या विंडो क्लास को एप्लिकेशन संदर्भ के साथ डिज़ाइन किया जाना चाहिए? या इससे बेहतर तरीका है?

+0

आपकी 'टीटीएचडी' कक्षा में सूचक थ्रेड स्थानीय संग्रहण में जाता है। कक्षा 'टीटीएचडी' में' टीएप्लिकेशन 'ऑब्जेक्ट के पॉइंटर के डेटा सदस्य के रूप में है। वैसे भी 'टीएप्लिकेशंस' ग्लोबल बनाने का अर्थ है, क्योंकि इसका कन्स्ट्रक्टर 'मुख्य' कहने से पहले कुछ प्रारंभ करने के लिए एक जगह प्रदान करता है। – lapk

+2

मुझे पता है कि वैश्विक चर (कारण के साथ) से बचने के लिए लोगों को कई प्रयासों से गुज़रना पड़ता है, लेकिन कभी-कभी वह तंत्र है जो वास्तविकता को सर्वोत्तम रूप से दर्शाता है। यदि डिज़ाइन द्वारा 'एप्लिकेशन' का हमेशा एक और एक उदाहरण होता है, तो क्यों * इसे * वैश्विक नहीं बनाते? –

+0

या सिंगलटन ... http://en.wikipedia.org/wiki/Singleton_pattern। लेकिन मैं अपने सभी विंडो ऑब्जेक्ट्स को मॉडल के संदर्भ में पास करना पसंद करूंगा, आपके मामले में यह एप्लीकेशन ऑब्जेक्ट AFAIU होगा। –

उत्तर

1

विंडो का विन एपीआई आपको एक सेट/गेटप्रॉपर्टी() देता है जो आपको जो भी चाहें पॉइंटर को परिभाषित करने की अनुमति देता है (यानी अपनी खुद की विंडो ऑब्जेक्ट।) हालांकि, अनुभव से मुझे पता है कि यह धीमा है।

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

जैसा कि सैमुअल द्वारा सुझाया गया है, एक सिंगलटन आपको ऐसी वस्तु प्राप्त करने की अनुमति देता है जो वैश्विक रूप से काफी समान है। फिर आप कुंजी एपीआई विंडो पॉइंटर का उपयोग करके अपनी विंडो ऑब्जेक्ट प्राप्त कर सकते हैं और यह आपकी ऑब्जेक्ट देता है।

यह आपके विंडो ऑब्जेक्ट्स में आने वाली घटनाओं को मैप करने की आवश्यकता है। बाकी सब कुछ वैसे भी किया जाना चाहिए (जैसा कि आप उम्मीद करेंगे, केवल अपनी विंडो ऑब्जेक्ट पर फ़ंक्शंस कॉल करें जो सिस्टम विंडो के समान तरीके से मैप किए जाते हैं।)

आप Qt का उपयोग क्यों नहीं कर रहे हैं? यह पहले से ही सी ++ में है और आपको उन विवरणों के बारे में चिंता करने की ज़रूरत नहीं है ...

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

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