Ordnungsgemäße Anzeige auf einer Anzeige mit hohem DPI-Wert
Obwohl Direct2D viele Probleme mit hohen DPI-Werten für Sie behandelt, sollten Sie zwei Schritte ausführen, um sicherzustellen, dass Ihre Anwendung auf Displays mit hoher DPI-Auflösung ordnungsgemäß funktioniert.
Schritt 1: Verwenden des eigenen DPI des Fensters nach dem Erstellen
Die GetDpiForWindow-Funktion ruft den dpi-Wert (Dots per Inch) für ein angegebenes Fenster ab. Verwenden Sie die folgende Formel, um mit diesem Wert die Breite eines Fensters festzulegen:
< DPI> * <Breite, in Pixel> / <Standard-DPI>
... dabei ist DPI der wert, der von GetDpiForWindow erneut verwendet wird, und der Standardwert DPI ist 96 (definiert als USER_DEFAULT_SCREEN_DPI
im winuser.h
Header). Die Formel ähnelt der vertikalen Achse:
< DPI> * <Höhe, in Pixel> / <standardmäßig vertikaler DPI>
Das Codebeispiel in Schritt 2.3 von Erstellen einer einfachen Direct2D-Anwendung ruft die DPI eines Fensters ab und legt dann die Größe auf 640 × 480 fest, skaliert auf den DPI.
Hinweis
Für eine Universelle Windows-Plattform-App (UWP) können Sie die DisplayInformation::LogicalDpi-Eigenschaft verwenden.
Schritt 2: Deklarieren, dass die Anwendung DPI-fähig ist
Wenn sich eine Anwendung als DPI-fähig deklariert, ist dies eine Anweisung, die angibt, dass sich die Anwendung bei DPI-Einstellungen bis zu 200 DPI gut verhält. Wenn die DPI-Virtualisierung in Windows Vista und Windows 7 aktiviert ist, werden Anwendungen skaliert, die nicht DPI-fähig sind, und Anwendungen erhalten virtualisierte Daten von den System-APIs, z. B. der GetSystemMetric-Funktion . Führen Sie die folgenden Schritte aus, um zu deklarieren, dass Ihre Anwendung DPI-fähig ist.
Erstellen Sie eine Datei namens DeclareDPIAware.manifest.
Kopieren Sie die folgende XML-Datei in die Datei, und speichern Sie sie:
<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>
Fügen Sie in der VCPROJ-Datei des Projekts in jedem Configuration-Element unter VisualStudioProject/Configurations den folgenden Eintrag hinzu:
<Tool Name="VCManifestTool" AdditionalManifestFiles="DeclareDPIAware.manifest" />