2016-03-31 20 views
0

我正在使用C#和.Net 4.5開發軟件。我在一臺老式機器上開始了項目,其DPI縮放爲100%。在我的新機器上,由於高分辨率顯示,我必須設置200%的縮放比例。我是否必須在我的源代碼中處理HiDPI功能,還是由.Net和.Net提供。視窗?

在Visual Studio Designer中,軟件的Gui完美呈現: Gui within the Designer

已編譯軟件的Gui呈現不良:Gui in compiled software

我的期望是,因爲我只使用.Net Gui Elements/Controls而沒有自己設計的gui元素,windows應該可以處理縮放而不會有任何問題。但是,正如我所看到的,窗戶不是。

是否必須在Visual Studio項目設置中啓用HiDPI選項,還是必須在代碼中處理HiDPI?

回答

4

默認情況下,大多數Windows窗體應用程序不支持DPI。實際上,大多數Windows應用程序都不是DPI。所以,你需要選擇加入DPI意識在您的應用程序清單:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" 
      xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > 
<asmv3:application> 
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
    <dpiAware>true</dpiAware> 
    </asmv3:windowsSettings> 
</asmv3:application> 
</assembly> 

由於DPI意識是每個進程中,VS設計師對這個問題上沒有選擇 - 它的Visual Studio,這是內運行DPI知道。

儘管如此,確保所有的一切都適用於低DPI和高DPI。 DPI意味着「我將正確處理所有DPI縮放,無需爲我僞造;謝謝。」希望你已經通過適當的自動縮放和佈局設計你的表單,或者使用獨立於設備的單元而不是像素:)

當你的應用程序沒有聲明被DPI識別時,Windows假定你是一個遺留應用程序,不能正確處理DPI。所以爲了防止出現問題,假裝您實際上正在渲染一個較小的顯示器 - 在您的情況下,尺寸只有一半,然後將產生的曲面恢復到適當的尺寸。這導致了模糊,尤其是對於文本,但確保了所有內容都具有適當的尺寸和比例 - 例如,你不會得到比它們中的文本更小的按鈕,或者重疊的控件。

如果使用正確的佈局方法,Windows窗體和WPF都可以正確處理DPI,因此.NET絕對支持DPI。但是它們都能夠很好地識別DPI,大多數應用程序仍然忽略DPI問題,所以默認情況與其他Windows應用程序相同。由於沒有「傳統WPF」應用程序,並且執行WPF的最簡單方式也是DPI,因此WPF的默認項目模板已經包含聲明DPI認知的清單,所以我假設您在Windows窗體中創建了項目:)實際上,鑑於Windows現在如何演變,您可能希望擁有程序集清單,以正確管理所有兼容性功能:)

要獲得額外的獎勵,當有多個顯示器具有不同的DPI時,會出現更多問題 - 要聲明正確支持,你會使用<dpiAware>true/PM</dpiAware>。這隻適用於Windows 8.1+,並且正確實施可能非常棘手。

相關問題