Partager via


Comment s’assurer que votre application s’affiche correctement sur les écrans haute résolution

Bien que DirectWrite traite pour vous de nombreux problèmes de résolution élevée, vous devez suivre deux étapes pour vous assurer que votre application fonctionne correctement sur les écrans haute résolution.

Étape 1 : Utiliser la propre ppp de la fenêtre après l’avoir créée

Pour ce faire, utilisez Direct2D ou GDI.

Direct2D

La fonction GetDpiForWindow récupère la valeur des points par pouce (ppp) pour une fenêtre spécifiée. Pour utiliser cette valeur pour définir la largeur d’une fenêtre, utilisez la formule suivante :

< DPI> * <largeur, en pixels> / <PPP par défaut>

... où PPP est la valeur rerivée par GetDpiForWindow, et ppp par défaut est 96. La formule est similaire pour l’axe vertical :

< DPI> * <hauteur, en pixels> / <ppp verticaux par défaut>

L’exemple de code de l’étape 2.3 de Créer une application Direct2D simple récupère l’ppp d’une fenêtre, puis définit sa taille sur 640 × 480, mise à l’échelle à la ppp.

Notes

Pour une application plateforme Windows universelle (UWP), vous pouvez utiliser la propriété DisplayInformation::LogicalDpi.

GDI

GDI fournit la fonction GetDeviceCaps pour récupérer les informations de l’appareil. Vous pouvez récupérer des informations PPP en transmettant les valeurs d’index LOGPIXELSX et LOGPIXELSY . La formule permettant de déterminer la taille horizontale et verticale d’une fenêtre est identique à celle de l’exemple Direct2D ci-dessus.

Le code suivant utilise la fonction GetDeviceCaps pour créer une fenêtre de 640 x 480, mise à l’échelle jusqu’à la pppion système.

FLOAT dpiX, dpiY;

HDC screen = GetDC(0);
dpiX = static_cast<FLOAT>(GetDeviceCaps(screen, LOGPIXELSX));
dpiY = static_cast<FLOAT>(GetDeviceCaps(screen, LOGPIXELSY));
ReleaseDC(0, screen);

hWnd = CreateWindow(
    TEXT("DirectWriteApp"),
    TEXT("DirectWrite Demo App"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    static_cast<INT>(dpiX * 640.f / 96.f),
    static_cast<INT>(dpiY * 480.f / 96.f),
    NULL,
    NULL,
    hInstance,
    NULL);

Étape 2 : Déclarer que l’application prend en charge ppp

Lorsqu’une application se déclare prise en charge de ppp, il s’agit d’une instruction spécifiant que l’application se comporte bien avec des paramètres PPP allant jusqu’à 200 PPP. Dans Windows Vista et Windows 7, lorsque la virtualisation PPP est activée, les applications qui ne prennent pas en charge la résolution sont mises à l’échelle et les applications reçoivent des données virtualisées à partir des API système, telles que la fonction GetSystemMetric . Pour déclarer que votre application prend en charge les ppp, effectuez les étapes suivantes.

  1. Créez un fichier appelé DeclareDPIAware.manifest.

  2. Copiez le code XML suivant dans le fichier et enregistrez-le :

    <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. Dans le fichier .vcproj du projet, ajoutez l’entrée suivante dans chaque élément Configuration sous VisualStudioProject/Configurations :

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