高 DPI 應用程序
我們的最終用戶研究產生了一些令人吃驚的結果–只有約 55% 的用戶實際設置的是大分辨率 . 這表示,幾乎一半的用戶都沒有充分的展示完全保真的 優勢。研究結果列於下表 :
最大分辨率 用戶最大百分比 1280X1024 56% 1400X1050 79% 1600X1200 32% 1680X1050 66% 1920X1050 39% 1920X1200 78% 平均 55%
大部分用戶使用低分辨 率,因為他們發現在高分辨率下的文字比較小 . 不過 , 可以完全的減少分辨率所帶來的負 面影響 , 包括 :
• ClearType 不正確地呈現在非本地的分辨率
• 用戶無法看到全保真高清內容
• 高分辨率的照片,不能 呈現在保真度最高
為了提高文字的大小 , 鼓勵用戶增加 DPI 設置顯示在他們的高逼 真度的優勢 , , 而不是降低分辨率,受到負面影響 . 但是 , 雖然這解決了與高保真流失的 問題 , 應用程序在沒有 DPI 感知的情況下經常有一些不合適的效果 , 例如 :
• 裁剪文本 :
• WinForms 問題 :
• 像素 位圖 :
• 布局問題和圖片大小問題 :
• 模糊界面 :
• 字體大小不匹配 :
隨著 Windows 7 的發布 , 將更大程度的采用 高 DPI ,理由如下 :
• 更多的 OEM 廠商預計將開始銷售高 DPI 設置配置的筆記本電腦
• Windows 7 的清潔功能的設備安裝已預先配置為高 DPI
• 用戶界面的控制面板的高 DPI 是容易找到
下表提供了各種顯示分辨率和建議的 DPI 設置規范 .
描述 水平 垂直 寬 度 面板 DPI 操作系統 DPI 比例 17" WXGA+ 1440 900 17.0 100 96 100% 15.4" WXGA+ 1440 900 15.4 110 96 100% 15.4" WXGA 1280 768 15.4 97 96 100% 14.1" WXGA 1280 768 14.1 106 96 100% 13.3" WXGA 1280 768 13.3 112 96 100% 17" WUXGA 1920 1200 17.0 133 120 125% 17" WSXGA+ 1680 1050 17.0 117 120 125 % 15.4" WSXGA+ 1680 1050 15.4 129 120 125 % 14.1" WXGA+ 1440 900 14.1 120 96* 125% 13.3" WXGA+ 1440 900 13.3 127 96* 125% 12.1" WXGA 1280 768 12.1 123 96* 125% 15.4" WUXGA 1920 1200 15.4 147 144 150%
注 : 在產生一個有效的分辨率 1024x 768, 我們從來沒有配 置 DPI.
添加高 DPI 支持您的應用程序比以往更重要 .
解決方案
首先 , 保證您的計算機在高 DPI 模式 . 你可以這樣做,通過控制面板中的顯示設置 :
然 後 , 測試在高 DPI 環境中的應用 .
WinForm 的應用程序通常結構良好,只需要很少 的 UI 控件調整 . 有時候 , 您應該改變 "AutoScaleMode" 在您的表單從 " 字體 " 到 "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 應用感知 , 再運行它,看看它如何 再受變更影響 . 現在 , 地址問題一個接一個的使用 CDPI 類,直到 您的應用程序完全兼容 高 DPI.
總結
高 DPI 顯示具有更高的分辨率設置 , 默認設置越來越普遍 . 高 DPI 不注意會引起嚴重的 UI 問題 , 甚至可以影響到適當的應用程序功能 . 因此 , 你 的應用程序應該具有 DPI 感知能力,並在 DPI 感知的環境下測試 . 一定要所有的本地應用 程序 UI 元素根據 DPI 設置 . 在 WinForm 應用中 , 注意窗體的 "AutoScaleMode" 屬性 .