首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 7 開發實作:高 DPI 感知 - WinForms 篇 (管理代碼)

     編輯:關於.NET

實驗概覽

研究顯示僅約 55% 使用者將顯示器設定為最高解析度,大多因高解析度字太小而降低解析度,但這會導致 ClearType 模糊、無法呈現高保真內容、照片品質下降。Windows 7 鼓勵使用者提高 DPI 設定 (而非降低解析度) 以獲得清晰文字與高保真顯示。然而,未具備 DPI 感知的應用程式在高 DPI 下會出現文字截斷、版面錯位、圖片模糊等問題。

隨著 Windows 7 釋出,高 DPI 環境將更普遍:OEM 預裝高 DPI 筆電、乾淨安裝預設高 DPI、控制台 DPI 設定更易發現。支援高 DPI 已成應用程式必備素質。

學習目標

  • 確保電腦處於高 DPI 模式 (144 DPI / 150%)
  • 比較 144 DPI 與 96 DPI 下的 UI 元素表現
  • 修改表單 AutoScaleMode 達成自動縮放

系統需求

  • Microsoft Visual Studio 2008
  • Windows 7

練習 #1:確保電腦處於高 DPI 模式

  1. 控制台 > 右上角搜尋「顯示」 > 點擊「顯示」。
  2. 選擇「較大 - 150%」 (對應 144 DPI,因 96 DPI × 150% = 144 DPI)。本實驗不需登出/登入,直接使用此設定。

控制台搜尋顯示 選擇 150% DPI

練習 #2:在 144 DPI 下執行應用程式並比較 UI

  1. VS 2008 開啟 HighDPIApp.sln,設定 HighDPIManagedApp 為啟動專案。
  2. 建置方案,F5 執行。
  3. 觀察應用程式外觀 (表單 AutoScaleMode = None):

144 DPI 下 AutoScaleMode=None

96 DPI vs 144 DPI UI 元素對照表 (AutoScaleMode = None)

UI 元素144 DPI 外觀
表單大小相同 (未縮放)
按鈕大小相同
PictureBox 大小相同
文字大小較大 (系統字體放大)
按鈕文字截斷是
視窗文字截斷是
長寬比維持是 (但內容被截斷)

原因: AutoScaleMode = None 完全停用自動縮放,表單與控制項維持設計時像素大小,唯有系統字體隨 DPI 放大,導致文字溢出截斷。

練習 #3:修改表單 AutoScaleMode 達成自動縮放

任務 1:設為 Font 縮放 (依字體大小縮放)

  1. 設計檢視開啟 DemoApp.cs,選取表單。
  2. 屬性視窗將 AutoScaleMode 改為 Font。
  3. 儲存、重建、執行。

AutoScaleMode=Font 效果

Font 縮放結果對照

UI 元素144 DPI 外觀
表單大小較大
按鈕大小較大
PictureBox 大小較大
文字大小較大
按鈕文字截斷否
視窗文字截斷否
長寬比維持否 (PictureBox 變形)

特性: 所有元素隨字體放大等比例縮放,解決文字截斷,但不保持長寬比,導致圖片拉伸變形。適合以文字為主、無圖形或不在意比例的表單。

任務 2:設為 DPI 縮放 (依 DPI 縮放,保持長寬比)

  1. 將 AutoScaleMode 改為 Dpi。
  2. 儲存、重建、執行。

AutoScaleMode=Dpi 效果

DPI 縮放結果對照

UI 元素144 DPI 外觀
表單大小較大
按鈕大小較大
PictureBox 大小較大
文字大小較大
按鈕文字截斷是 (但較少)
視窗文字截斷是 (但較少)
長寬比維持是 (圖片不變形)

特性: 水平/垂直依 DPI 同比例縮放,完美保持長寬比,圖片、圖示不變形。文字仍可能輕微截斷 (因字體渲染與控制項邊界計算差異)。適合含圖片、圖表、圖形介面的表單。

總結與進階建議

  • AutoScaleMode 選擇指南:
    • Font:純文字/資料輸入表單,無圖形,不在意比例。
    • Dpi:含圖片、圖表、工具列圖示,需保持視覺比例。
    • None:特殊需求 (如固定大小視窗、自行處理縮放)。
  • 真正的高保真 DPI 感知: 應準備多解析度版本的位圖、圖示、工具列按鈕圖片。執行時根據當前 DPI 選擇最接近的素材再微調縮放,避免小圖放大模糊或大圖縮小失真。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved