2012-02-21 13 views
37

मुझे लगता है कि पूरी तरह से काम करता है जब तक उपयोगकर्ता 125% या 150% का चयन करता है एक आवेदन बनाया। यह मेरा आवेदन तोड़ देगा। बाद में मुझे डीपीआई का पता लगाकर फ़ॉन्ट आकार खोजने का एक तरीका मिला।का पता लगाने खिड़कियां फ़ॉन्ट आकार (100%, 125%, 150%)

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

मेरे वर्तमान कोड इस तरह काम करता है:

if (dpi.DpiX == 120) //For 125% fonts 
{ 
    //Resize form and set default font to correct problems 
} 
else if (dpi.DpiX == 96) //For 100 and 150% fonts 
{ 
    //Resize form and set default font to correct problems 
} 

विंडोज 7 कि अच्छा काम करता है के अंग्रेजी संस्करण पर, लेकिन किसी भी तरह चीनी संस्करण इस से सही छोड़, और प्रपत्र पर ही नष्ट कर देता है, नियंत्रण के साथ भी दिखाई नहीं दे रहा, फ़ॉन्ट बहुत बड़ा और समस्या से पहले धक्का, तस्वीर बक्से चारों ओर ले जाया जा रहा है।

तो एपीआई का पता लगाने के बिना खिड़कियों फ़ॉन्ट पैमाने (100%, 125%, और 150%) का पता लगाने के लिए एक अच्छा तरीका क्या है? मुझे कुछ ठोस चाहिए जो सभी विंडोज 7 ऑपरेटिंग सिस्टम और भाषाओं पर काम करेगी।

+0

मुझे वास्तव में इसकी टाइपिंग और कुछ वर्तनी की गलतियां बनाया गया था। मेरा मतलब था "डीपीआई" नहीं "एपीआई"। क्षमा करें –

+0

आप क्या वर्णन बहुत अधिक लगता है वीडियो चालक और/या स्थापित फोंट ... – Yahia

+0

बस suggession के साथ एक समस्या की तरह: अगर आप चीनी ग्राहकों की seriouse राशि है, इसके लिए कम से कम 'VirtualMachine' बनाने के लिए कुछ समय के निवेश के लिए worths 'वर्चुअलबॉक्स' या 'वीएमवेयर', ताकि आप वास्तविक ऐस के निकटतम निकटता के साथ अपने ऐप का परीक्षण कर सकें, क्योंकि यह संभव है। – Tigran

उत्तर

16

चर डीपीआई सेटिंग्स से निपटने का सही तरीका उन्हें पता लगाने और एक switch बयान में मैन्युअल रूप से अपने नियंत्रण 'आकार को समायोजित (शुरुआत के लिए, वहाँ उन आप अपने नमूना if बयान में दिखाने के तुलना में कहीं अधिक संभावनाएं हैं) के लिए नहीं है।

इसके बजाय, आपको को अपने फॉर्म के AutoScaleMode.Dpi पर सेट करना चाहिए और ढांचे को आपके लिए इसका ख्याल रखना चाहिए।

आपके प्रपत्र के निर्माता के लिए निम्न कोड जोड़ें (या डिजाइन समय इस गुण सेट):

this.AutoScaleMode = AutoScaleMode.Dpi; 

आप AutoScaleMode.Font उपयोग करने के लिए पसंद कर सकते हैं हालांकि। स्वचालित स्केलिंग के बारे में अधिक जानकारी के लिए, the MSDN documentation देखें।

+1

मैंने ऐसा करने का प्रयास किया, लेकिन समस्या यह है कि मेरा आवेदन उस –

+1

@user के साथ गड़बड़ कर रहा है "गड़बड़" का क्या मतलब है? क्या वास्तव में गलत हो जाता है? आपने इसे डिबग करने का प्रयास कैसे किया है?क्या आप अपने नियंत्रणों के लिए सापेक्ष स्थिति का उपयोग करते हैं, जैसे उन्हें कंटेनरों में रखकर और 'एंकर' और 'डॉक' गुणों को सेट करके? पूर्ण स्थिति कभी काम नहीं करेगी, भले ही उपयोगकर्ता अपना डिफ़ॉल्ट फ़ॉन्ट चेहरा/आकार बदलता है, डीपीआई शामिल होने पर बहुत कम होता है। –

+8

ऑटोस्केलेमोड.नोन का उपयोग करके मेरी समस्या तय! –

5

सी ++/Win32 उपयोगकर्ताओं के लिए, यहाँ एक अच्छा संदर्भ है: Writing High-DPI Win32 Applications

+0

यहां संदर्भ का एक और बिट http://technet.microsoft.com/en-us/library/dn528846.aspx है –

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