Freigeben über


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.

  1. Erstellen Sie eine Datei namens DeclareDPIAware.manifest.

  2. 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>
    
  3. 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"
    />