.Net फ्रेमवर्क 4.7 के लिए अपने एप्लिकेशन को लक्षित करें और इसे विंडोज 10 v1703 (क्रिएटर्स अपडेट बिल्ड 15063) के तहत चलाएं। Windows 10 (v1703) के तहत .Net 4.7 के साथ , MS ने DPI में बहुत सुधार किया ।
.NET फ्रेमवर्क 4.7 के साथ शुरू, विंडोज फॉर्म में सामान्य उच्च डीपीआई और गतिशील डीपीआई परिदृश्यों के लिए एन्हांसमेंट शामिल हैं। इसमें शामिल है:
कई Windows प्रपत्र नियंत्रणों के स्केलिंग और लेआउट में सुधार, जैसे कि मंकेलेन्डर नियंत्रण और चेकडेलबॉक्स नियंत्रण।
एकल पास स्केलिंग। .NET फ्रेमवर्क 4.6 और पुराने संस्करणों में, स्केलिंग को कई पास के माध्यम से किया गया था, जिससे कुछ नियंत्रणों को आवश्यक से अधिक स्केल किया गया था।
डायनेमिक DPI परिदृश्यों के लिए समर्थन जिसमें उपयोगकर्ता Windows प्रपत्र अनुप्रयोग लॉन्च करने के बाद DPI या स्केल फैक्टर को बदलता है।
इसका समर्थन करने के लिए, अपने एप्लिकेशन में एक एप्लिकेशन मैनिफ़ेस्ट जोड़ें और संकेत दें कि आपका ऐप विंडोज़ 10 का समर्थन करता है:
<compatibility xmlns="urn:schemas-microsoft.comn:compatibility.v1">
<application>
<!-- Windows 10 compatibility -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
इसके बाद, एक जोड़ें app.config
और एप्लिकेशन को मॉनिटर मॉनिटर अवेयर घोषित करें। यह अब app.config में किया गया है और पहले की तरह प्रकट में नहीं है!
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
यह PerMonitorV2 विंडोज 10 क्रिएटर्स अपडेट के बाद से नया है:
DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2
प्रति मॉनिटर v2 के रूप में भी जाना जाता है। मूल प्रति-मॉनिटर डीपीआई जागरूकता मोड पर एक उन्नति, जो अनुप्रयोगों को प्रति शीर्ष-स्तरीय विंडो आधार पर नए डीपीआई-संबंधित स्केलिंग व्यवहार तक पहुंचने में सक्षम बनाता है।
चाइल्ड विंडो डीपीआई परिवर्तन सूचनाएँ - प्रति मॉनिटर v2 संदर्भों में, पूरे विंडो ट्री को होने वाले किसी भी डीपीआई परिवर्तन के बारे में सूचित किया जाता है।
गैर-क्लाइंट क्षेत्र का स्केलिंग - सभी विंडो स्वचालित रूप से अपने गैर-क्लाइंट क्षेत्र को एक डीपीआई संवेदनशील फैशन में खींचा जाएगा। EnableNonClientDpiScaling की कॉल अनावश्यक हैं।
Win32 मेनू के एस कैलिंग - प्रति मॉनिटर v2 संदर्भों में बनाए गए सभी NTUSER मेनू प्रति मॉनिटर फैशन में स्केलिंग होंगे।
डायलॉग स्केलिंग - प्रति मॉनिटर v2 संदर्भों में बनाए गए Win32 संवाद स्वचालित रूप से DPI परिवर्तनों का जवाब देंगे।
Comctl32 नियंत्रण की बेहतर स्केलिंग - विभिन्न comctl32 नियंत्रणों ने प्रति मॉनिटर v2 संदर्भों में DPI स्केलिंग व्यवहार में सुधार किया है।
बेहतर थीमिंग व्यवहार - प्रति मॉनिटर v2 विंडो के संदर्भ में खोला गया UxTheme हैंडल उस विंडो से जुड़े DPI के संदर्भ में काम करेगा।
अब आप DPI परिवर्तनों के बारे में सूचित करने के लिए 3 नई घटनाओं की सदस्यता ले सकते हैं:
Control.DpiChangedAfterParent , जो तब निकाल दिया जाता है जब नियंत्रण के लिए DPI सेटिंग प्रोग्रामेटिक रूप से बदल दी जाती है, जब DPI परिवर्तन ईवेंट के लिए यह पेरेंट कंट्रोल या फॉर्म होता है।
Control.DpiChangedBeforeParent , जो कि नियंत्रण के लिए DPI सेटिंग को उसके मूल नियंत्रण या प्रपत्र के लिए DPI परिवर्तन ईवेंट से पहले प्रोग्रामेटिक रूप से बदल दिया जाता है, जब निकाल दिया जाता है।
Form.DpiChanged , जिसे निकाल दिया जाता है जब DPI सेटिंग डिस्प्ले डिवाइस पर बदलता है जहां वर्तमान में फॉर्म प्रदर्शित होता है।
आपके पास DPI हैंडलिंग / स्केलिंग के बारे में 3 सहायक विधियाँ हैं:
Control.LogicalToDeviceUnits , जो तार्किक से डिवाइस पिक्सेल तक के मान को परिवर्तित करता है।
Control.ScaleBitmapLogicalToDevice , जो डिवाइस के लिए तार्किक DPI के लिए एक बिटमैप छवि को मापता है।
नियंत्रण। DeviceDpi , जो वर्तमान डिवाइस के लिए DPI लौटाता है।
यदि आप अभी भी समस्याएं देखते हैं, तो आप app.config प्रविष्टियों के माध्यम से DPI में सुधार का विकल्प चुन सकते हैं ।
यदि आपके पास स्रोत कोड तक पहुंच नहीं है, तो आप विंडोज एक्सप्लोरर में एप्लिकेशन प्रॉपर्टीज पर जा सकते हैं, संगतता पर जा सकते हैं और चयन कर सकते हैं System (Enhanced)
जो GDI स्केलिंग को सक्रिय करता है, वह DPI हैंडलिंग को भी बेहतर बनाता है:
उन अनुप्रयोगों के लिए जो GDI- आधारित विंडोज हैं, अब प्रति मॉनिटर के आधार पर इन्हें DPI स्केल कर सकते हैं। इसका अर्थ है कि ये अनुप्रयोग, जादुई रूप से, डीपीआई की निगरानी के प्रति जागरूक हो जाएंगे।
उन सभी चरणों को करें और आपको WinForms अनुप्रयोगों के लिए एक बेहतर DPI अनुभव प्राप्त करना चाहिए। लेकिन याद रखें, आपको अपने ऐप को .net 4.7 के लिए टारगेट करना होगा और कम से कम विंडोज 10 बिल्ड 15063 (क्रिएटर्स अपडेट) की जरूरत होगी। अगले विंडोज 10 अपडेट 1709 में, हमें अधिक सुधार मिल सकते हैं।
NumericUpDown
इसकेMargin
ठीक पैमाने पर भी नहीं है। ऐसा लगता है कि मार्जिन दो बार बढ़ाया गया है। अगर मैं इसे एक बार वापस कर दूं, तो यह अच्छा लग रहा है।