共用方式為


在高 DPI 顯示器上正確顯示

雖然 Direct2D 可解決許多高 DPI 問題,但您應該採取兩個步驟,以確保您的應用程式在高 DPI 顯示器上正常運作。

步驟 1:建立視窗之後,使用視窗本身的 DPI

GetDpiForWindow函式會擷取指定視窗的每英吋點數 (DPI) 值。 若要使用該值來設定視窗的寬度,請使用下列公式:

< Dpi>* <寬度,以圖元 > 為單位/ <預設 DPI>

...其中 DPIGetDpiForWindow所重試的值, 而預設 DPI 是 96 (定義為 USER_DEFAULT_SCREEN_DPIwinuser.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 感知,請完成下列步驟。

  1. 建立名為 DeclareDPIAware.manifest 的檔案。

  2. 將下列 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>
    
  3. 在專案的 .vcproj 檔案中,于 VisualStudioProject/Configurations 下的每個 Configuration 元素內新增下列專案:

    <Tool
        Name="VCManifestTool"
        AdditionalManifestFiles="DeclareDPIAware.manifest"
    />