在高 DPI 顯示器上正確顯示
雖然 Direct2D 可解決許多高 DPI 問題,但您應該採取兩個步驟,以確保您的應用程式在高 DPI 顯示器上正常運作。
步驟 1:建立視窗之後,使用視窗本身的 DPI
GetDpiForWindow函式會擷取指定視窗的每英吋點數 (DPI) 值。 若要使用該值來設定視窗的寬度,請使用下列公式:
< Dpi>* <寬度,以圖元 > 為單位/ <預設 DPI>
...其中 DPI 是 GetDpiForWindow所重試的值, 而預設 DPI 是 96 (定義為 USER_DEFAULT_SCREEN_DPI
winuser.h
標頭) 。 公式與垂直軸類似:
< Dpi>* <高度,以圖元 > 為單位/ <預設垂直 DPI>
建立簡單 Direct2D 應用程式的步驟 2.3 中的程式碼範例會擷取視窗的 DPI,然後將其大小設定為 640 × 480,縮放為 DPI。
注意
針對通用 Windows 平臺 (UWP) app,您可以使用DisplayInformation::LogicalDpi屬性。
步驟 2:宣告應用程式為 DPI 感知
當應用程式將本身宣告為 DPI 感知時,它是一個語句,指定應用程式在 DPI 設定上運作良好,最高為 200 DPI。 在 Windows Vista 和 Windows 7 中,啟用 DPI 虛擬化時,會調整非 DPI 感知的應用程式,以及應用程式從系統 API 接收虛擬化資料,例如 GetSystemMetric 函式。 若要宣告您的應用程式為 DPI 感知,請完成下列步驟。
建立名為 DeclareDPIAware.manifest 的檔案。
將下列 xml 複製到檔案中,並加以儲存:
<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>
在專案的 .vcproj 檔案中,于 VisualStudioProject/Configurations 下的每個 Configuration 元素內新增下列專案:
<Tool Name="VCManifestTool" AdditionalManifestFiles="DeclareDPIAware.manifest" />