पर अलग-अलग एरियल प्रस्तुत करता है मेरे पास एक सी # एप्लिकेशन है जो पाठ प्रतिपादन करता है, जो कि एक साधारण wysiwyg टेक्स्ट एडिटर के समान है।TextRenderer.DrawText XP बनाम Vista
मैं टेक्स्ट को पाठ प्रस्तुत करने के लिए TextRenderer.DrawText का उपयोग कर रहा हूं और पाठ को मापने के लिए GetTextExtentPoint32 का उपयोग कर रहा हूं ताकि मैं एक ही पंक्ति पर विभिन्न फ़ॉन्ट शैलियों/आकारों को स्थिति दे सकूं।
Vista में यह सब ठीक काम करता है। हालांकि एक्सपी में, एरियल अलग-अलग प्रस्तुत करता है, 'ओ' और 'बी' जैसे कुछ वर्ण विस्टा की तुलना में अधिक चौड़ाई लेते हैं। लगता है कि GetTextExtentPoint32 स्ट्रिंग को मापने जैसा प्रतीत होता है क्योंकि यह विस्टा में छोटी चौड़ाई के साथ होगा। अंत परिणाम यह है कि प्रत्येक अब और उसके बाद पाठ का एक भाग इसे पहले से टेक्स्ट को ओवरलैप कर देगा क्योंकि पिछले पाठ को स्क्रीन पर वास्तव में छोटे से मापा जाता है।
इसके अलावा, मेरा टेक्स्ट प्रतिपादन कोड नकल यानी पाठ प्रतिपादन (केवल सरल स्वरूपण और अंग्रेजी भाषा के लिए) की नकल करता है और यानी पाठ प्रतिपादन विस्टा और एक्सपी के बीच संगत लगता है - इस तरह मैंने विभिन्न पात्रों के आकार में परिवर्तन को देखा।
किसी के पास क्या हो रहा है इसके बारे में कोई विचार है?
संक्षेप में, TextRenderer.DrawText और GetTextExtentPoint32 एरियल के लिए xp में मेल नहीं खाते हैं। ड्राटाक्स्ट विस्टा में कुछ वर्णों को बड़ा और/या छोटा करता है लेकिन GetTextExtentPoint32 टेक्स्ट को मापने जैसा प्रतीत होता है क्योंकि यह Vista में होगा (जो कि xp और vista दोनों में टेक्स्ट प्रतिपादन से मेल खाता है)। उम्मीद है कि समझ में आता है।
नोट: दुर्भाग्यवश TextRenderer.MeasureString मेरी आवश्यकताओं को पूरा करने के लिए पर्याप्त तेज़ या सटीक नहीं है। मैंने इसका इस्तेमाल करने की कोशिश की और उसे बाहर निकालना पड़ा।
+1 क्योंकि मुझे पता है कि आप किसके साथ काम कर रहे हैं! और मुझे केवल निश्चित चौड़ाई फोंट से निपटना पड़ा। – leppie
क्या आप सुनिश्चित हैं कि यह डीपीआई या क्लेरटाइप प्रकार की समस्या नहीं है? –