高 DPI ディスプレイに正しく表示する
Direct2D では多くの高 DPI の問題に対処できますが、アプリケーションが高 DPI ディスプレイで正しく動作するようにするには、2 つの手順を実行する必要があります。
手順 1: 作成後にウィンドウの独自の DPI を使用する
GetDpiForWindow 関数は、指定されたウィンドウのドット/インチ (dpi) の値を取得します。 この値を使用してウィンドウの幅を設定するには、次の式を使用します。
< Dpi>* <幅(ピクセル単位>/<既定の DPI)>
...ここで、DPI は GetDpiForWindow によって再表示される値であり、既定の DPI は 96 (ヘッダーでUSER_DEFAULT_SCREEN_DPI
winuser.h
定義) です。 数式は縦軸に似ています。
< Dpi>* <高さ(ピクセル単位>/<既定の垂直 DPI)>
「 単純な Direct2D アプリケーションを作成 する」の手順 2.3 のコード例では、ウィンドウの DPI を取得し、そのサイズを DPI にスケーリングして 640 × 480 に設定します。
Note
ユニバーサル Windows プラットフォーム (UWP) アプリの場合は、DisplayInformation::LogicalDpi プロパティを使用できます。
手順 2: アプリケーションが DPI 対応であることを宣言する
アプリケーションがそれ自体を DPI 対応として宣言する場合は、アプリケーションが最大 200 DPI の DPI 設定で適切に動作することを指定するステートメントです。 Windows Vista および Windows 7 では、DPI 仮想化が有効になっている場合、DPI 対応ではないアプリケーションがスケーリングされ、アプリケーションは GetSystemMetric 関数などのシステム API から仮想化データを受け取ります。 アプリケーションが 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" />