2010-05-06 21 views
7

MFC के लिए अपेक्षाकृत नवागंतुक के रूप में संदर्भों, मैं डिवाइस संदर्भ (डीसी) एक बहुत देखते हैं। मैं अस्पष्ट रूप से समझता हूं कि यह ड्राइंग के साथ कुछ करने के लिए है, लेकिन विनिर्देशों को कहीं भी कहीं भी समझाया नहीं जा सकता है। "संगत डिवाइस संदर्भ" का अर्थ क्या है, और यह महत्वपूर्ण क्यों है? SelectObject क्या करता है, और मुझे डीसी को पहले संगत कैसे करना चाहिए?समझौता डिवाइस

उत्तर

11

एक डिवाइस प्रसंग सिर्फ एक जगह है कि ड्राइंग होता है, तो आप दो अलग डीसी के, आप दो अलग अलग स्थानों में ड्राइंग कर रहे है। फ़ाइल हैंडल की तरह।

डिवाइस संदर्भ स्क्रीन पर अचल संपत्ति का उल्लेख कर सकते हैं, या बिटमैप कि सिर्फ स्मृति में रहते हैं, और शायद अन्य स्थानों के लिए भी, उन सिर्फ दो मैं इस समय के बारे में सोच सकते हैं।

संगत संदर्भों वाले समान ही अंतर्निहित पिक्सेल संगठन है, जिसके द्वारा पिक्सेल प्रति बिट्स की संख्या के लिए है, पिक्सेल, रंग प्रति संगठन बाइट्स और इसके आगे होती है। मेमोरी बिटमैप डिवाइस संदर्भों में आपके पास कोई भी संगठन हो सकता है, लेकिन आपके स्क्रीन संदर्भ आपके ग्राफिक्स कार्ड पर बफर के लिए संबंधित (अंततः) होने जा रहे हैं, जो (मोड के आधार पर) के पास एक बहुत ही विशिष्ट पिक्सेल संगठन होगा।

संगत संदर्भों के बाद, उन दोनों के बीच छवि डेटा स्थानांतरित करने के क्योंकि डेटा के कम या कोई अनुवाद की आवश्यकता है अपने कुशल मतलब है। दूसरी चरम पर, यदि आपके पास 256 कलर पैलेट, 8 बिट मैप है और आप इसे स्क्रीन पर ब्लूट करने का प्रयास करते हैं जिसमें आरजीबीए प्रति पिक्सेल के 8 बिट्स हैं, तो प्रत्येक अंतिम पिक्सेल को महत्वपूर्ण मालिशिंग की आवश्यकता होगी क्योंकि इसकी प्रतिलिपि बनाई गई है और इसलिए असंगत प्रतिलिपि बनाना बिटमैप्स बहुत धीमा है। Win32 SDK दस्तावेज़ के अनुसार, कम से कम BitBlt() और StretchBlt() "गंतव्य प्रारूप से मिलान करने के लिए स्रोत रंग प्रारूप को रूपांतरित करें", इसलिए यह किया जा सकता है।

CreateCompatibleDC() और CreateCompatibleBitmap() को पहले से मौजूद लोगों के साथ संगत ड्राइंग संदर्भ बनाने के लिए प्रारंभ बिंदु के रूप में जांचें।

SelectObject() नियंत्रण जो संसाधनों वर्तमान में डिवाइस संदर्भ में सक्रिय हैं। एक संदर्भ में एक वर्तमान पेन, ब्रश, फ़ॉन्ट, और बिटमैप है। ये आपको कम पैरामीटर निर्दिष्ट करने की इजाजत देकर अन्य जीडीआई कॉल को सरल बनाते हैं। उदाहरण के लिए, जब आप TextOut() का उपयोग करते हैं तो आपको फ़ॉन्ट निर्दिष्ट करने की आवश्यकता नहीं होती है, लेकिन यदि आप फ़ॉन्ट को बदलना चाहते हैं, तो वह है जहां SelectObject() आता है। यदि आप SelectObject() को एक फ़ॉन्ट पर एक हैंडल फ़ीड करते हैं, तो वापसी मान प्रभावी रूप से फ़ॉन्ट के लिए एक हैंडल है, और बाद के संचालन नए फ़ॉन्ट का उपयोग करते हैं। व्यवहार अन्य प्रकार के संसाधनों, पेन, ब्रश इत्यादि के लिए समान है

+0

धन्यवाद! उस पर कुछ अनुवर्ती प्रश्न, फिर: क्या आप गैर-संगत डीसी का उपयोग कर सकते हैं, और अभी भी एक कार्यरत प्रोग्राम है (हालांकि बहुत धीमा)? और SelectObject डिवाइस संदर्भ संगतता की अवधारणा में कहां आता है? – Smashery

+0

@Smashery: उन मुद्दों को बेहतर ढंग से संबोधित करने के लिए थोड़ा सा संपादित किया गया। – JustJeff

+0

धन्यवाद - एक बहुत स्पष्ट और उपयोगी उत्तर! – Smashery

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