Affichage correct sur un écran haute résolution
Bien que Direct2D traite de nombreux problèmes de ppp élevés pour vous, vous devez effectuer deux étapes pour vous assurer que votre application fonctionne correctement sur les affichages à haute résolution.
Étape 1 : Utiliser le DPI de la fenêtre après l’avoir créée
La fonction GetDpiForWindow récupère la valeur 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ù DPI est la valeur rerivée par GetDpiForWindow, et où DPI par défaut est 96 (défini comme dans l’en-tête USER_DEFAULT_SCREEN_DPI
winuser.h
). La formule est similaire pour l’axe vertical :
< DPI> * <hauteur, en pixels> / <ppp vertical par défaut>
L’exemple de code de l’étape 2.3 de Créer une application Direct2D simple récupère le DPI d’une fenêtre, puis définit sa taille sur 640 × 480, mise à l’échelle vers le PPP.
Notes
Pour une application plateforme Windows universelle (UWP), vous pouvez utiliser la propriété DisplayInformation::LogicalDpi.
Étape 2 : Déclarer que l’application prend en charge les PPP
Lorsqu’une application se déclare compatible avec DPI, il s’agit d’une instruction spécifiant que l’application se comporte bien aux paramètres DPI jusqu’à 200 PPP. Dans Windows Vista et Windows 7, lorsque la virtualisation DPI est activée, les applications qui ne prennent pas en charge les PPP 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.
Créez un fichier appelé DeclareDPIAware.manifest.
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>
Dans le fichier .vcproj du projet, ajoutez l’entrée suivante à l’intérieur de chaque élément Configuration sous VisualStudioProject/Configurations :
<Tool Name="VCManifestTool" AdditionalManifestFiles="DeclareDPIAware.manifest" />