2009-02-21 17 views
9

उपयोगकर्ताओं को डीपीआई (9 6/120/xxx) और/या फ़ॉन्ट आकार (सामान्य, बड़ा, अतिरिक्त बड़ा) का सम्मान करने के लिए मैं अपना स्वामी ड्रॉइन उपयोगकर्ता नियंत्रण कैसे प्राप्त करूं?सी # उपयोगकर्ताओं से मेल खाने के लिए उपयोगकर्ता नियंत्रण सामग्री स्केलिंग डीपीआई/फ़ॉन्ट आकार

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

स्टैक ओवरव्लो पर एक और समान प्रश्न है जहां यह ऑटोस्केल गुणों का उपयोग करने का सुझाव देता है, लेकिन सुझाए गए समाधान वास्तव में कुछ भी नहीं करते हैं।

क्या WPF पर भरोसा करने के अलावा .NET में ऐसा करने का कोई तरीका नहीं है?

उत्तर

3

मुझे एक ही समस्या है, मैंने ग्राफिक्स का उपयोग करने के अलावा GetDC + GetDeviceCaps + ReleaseDC का उपयोग करने का प्रयास किया, कम से कम Vista32 पर काम किया। मुझे अभी तक डीपीआई के साथ अनुभव नहीं हुआ है, लेकिन किसी ने इसका उत्तर नहीं दिया था और कम से कम यह दूसरों के लिए सहायक हो सकता है।

Creating a DPI-Aware Application देखें। यह उल्लेख है कि वास्तविक डीपीआई सेटिंग के बावजूद यह हमेशा 96 क्यों लौटा सकता है। ऊपर दी गई लिंक से

उद्धरण: डीपीआई स्केलिंग को रद्द करने के

  • उपयोग SetProcessDPIAware समारोह: एक Win32 आवेदन

    Win32 अनुप्रयोगों में में

    डीपीआई स्केलिंग, निम्न कार्य करें।

  • तैयार किए गए इंटरफ़ेस तत्वों का आकार बदलने पर, सेंटीमीटर जैसे भौतिक माप का उपयोग करें। पिक्सल की बजाय भौतिक आयामों का उपयोग करके, आप सभी प्रकार के डिस्प्ले पर लगातार आकार सुनिश्चित करते हैं।
  • सिस्टम डीपीआई सेटिंग प्राप्त करने के लिए, LOGPIXELSX ध्वज के साथ सीडीसी :: GetDeviceCaps फ़ंक्शन का उपयोग करें। यदि आप डीपीआई स्केलिंग रद्द नहीं करते हैं, तो यह कॉल 96 डीपीआई का डिफ़ॉल्ट मान देता है।
  • विंडो सीमाओं जैसे उपयोगकर्ता इंटरफ़ेस तत्वों के पसंदीदा आकार प्राप्त करने के लिए GetSystemMetrics फ़ंक्शन का उपयोग करें। जब डीपीआई स्केलिंग अक्षम होती है, तो इंटरफ़ेस तत्वों के लिए लौटाए गए माप मान चयनित डीपीआई सेटिंग में स्केल किए जाते हैं। यदि डीपीआई स्केलिंग सक्रिय है, तो सिस्टम डीपीआई सेटिंग के बावजूद, फ़ंक्शन 96 डीपीआई के आधार पर माप देता है। -statement (original source) का उपयोग कर के साथ फिर से लिखा About DPI Issue

    नमूना कोड:

से उत्तर दिया

float dpiX = 96, dpiY = 96; 
using(Graphics graphics = this.CreateGraphics()) 
{ 
    dpiX = graphics.DpiX; 
    dpiY = graphics.DpiY; 
} 
11

आप AutoScaleMode को UserControl के AutoScaleMode गुण सेट करने की आवश्यकता होगी। डीपीआई, और ऑटोस्केल संपत्ति को सत्य पर सेट करें। यदि आप करते हैं, तो यह ऑटोस्केलेमोड को वापस किसी भी पर रीसेट कर देगा। ऑटोस्केल संपत्ति अप्रचलित है और केवल पिछली संगतता के लिए है (इस MSDN article में महत्वपूर्ण नोट देखें)।

इसके अलावा, विंडोज विस्टा/7 में, जब तक कि आप स्पष्ट रूप से निर्दिष्ट नहीं करते कि आपका एप्लिकेशन डीपीआई-जागरूक है, तो विंडोज एक डिफ़ॉल्ट डीपीआई वातावरण का अनुकरण करेगा ताकि आपका एप्लिकेशन 96 डीपीआई के साथ प्रस्तुत हो सके, फिर परिणामी बिटमैप को उचित आकार में स्केल करें। इससे बचने के लिए, आप विंडोज़ को सूचित करने के लिए अपना एप्लीकेशन मैनिफेस्ट बदल सकते हैं कि आप वास्तव में डीपीआई जानते हैं - this article में डीपीआई जागरूकता अनुभाग घोषित करने के लिए मैनिफेस्ट का उपयोग करना।

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