Résoudre les problèmes HDPI/de mise à l’échelle avec le Concepteur Windows Forms dans Visual Studio

Dans cet article, vous découvrez comment résoudre les problèmes de rendu dus aux limitations de mise à l’échelle du Concepteur Windows Forms sur des moniteurs HDPI en exécutant Visual Studio en tant que processus sans prise en charge DPI. HDPI signifie « high dots per inch », c’est-à-dire un nombre élevé de points par pouce, chaque point représentant un pixel d’appareil physique.

Une densité de pixels plus élevée crée des images plus nettes et la mise à l’échelle de l’affichage dimensionne les éléments correctement. Sans une mise à l’échelle correcte, les éléments et le texte de l’interface utilisateur sont trop petits pour être utilisés efficacement et ils peuvent se chevaucher. Pour résoudre ce problème, Windows met automatiquement à l’échelle le centile de l’interface utilisateur pour qu’il corresponde au paramètre DPI. Par exemple, un paramètre DPI de 100 % représente 96 DPI et 125 % représente 120 DPI. Moniteurs utilisés pour 96 pixels par pouce. Il s’agit de la base de référence utilisée par Windows pour un dessin bitmap à 100 %. Toutefois, à mesure des progrès de la technologie d’affichage, les moniteurs utilisent désormais des panneaux de 300 DPI ou plus.

Quand une application déclare prendre en charge les DPI, cela signifie qu’elle se comporte correctement avec des paramètres DPI plus élevés et que Windows peut donc appliquer la mise à l’échelle automatique. À l’inverse, les applications sans prise en charge DPI sont affichées avec une valeur DPI fixe de 96 pixels par pouce, ou 100 %. La mise l’échelle automatique n’est donc pas appliquée.

Concepteur Windows Forms est une application sans prise en charge DPI

Remarque

Dans Visual Studio 2022 version 17.8 ou ultérieure, vous pouvez éviter les problèmes décrits dans cet article. Visual Studio 2022 version 17.8 prend en charge les onglets sans prise en charge DPI au sein d’une application avec prise en charge DPI. Consultez les améliorations DPI dans Visual Studio. Cela vous permet de concevoir Windows Forms pour des contextes sans prise en charge DPI sans exécuter Visual Studio en mode sans prise en charge DPI. Pour utiliser ce paramètre dans un projet Windows Forms, définissez la propriété ForceDesignerDPIUnaware sur true dans votre fichier projet :

<PropertyGroup>
  ...
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>

Par défaut, Visual Studio est une application avec prise en charge DPI (dots per inch, points par pouce), ce qui signifie que l’affichage est mis à l’échelle automatiquement. Toutefois, le Concepteur Windows Forms est une application sans prise en charge DPI. Il s’affiche donc sous la forme d’une image bitmap au format 96 DPI. Sans prise en charge de la mise à l’échelle automatique, des problèmes et des chevauchements surviennent quand des formulaires sont ouverts sur des moniteurs HDPI, comme dans cette image :

Screenshot of Windows Forms Designer on HDPI monitor that shows issues due to lack of autoscaling support.

Quand vous ouvrez un formulaire dans Concepteur Windows Forms sur un moniteur HDPI, Visual Studio affiche des informations supplémentaires, ainsi qu’une barre d’informations indiquant le pourcentage de mise à l’échelle actuel du moniteur (par exemple 150 %/144 PPP). Il s’agit d’une option permettant de redémarrer Visual Studio avec une mise à l’échelle de 100 % pour correspondre à Concepteur Windows Forms. En redémarrant avec une mise à l’échelle de 100 %, Visual Studio repasse en mode sans prise en charge DPI, ce qui permet un rendu correct sans chevauchement.

Screenshot of the information bar in Visual Studio to restart in DPI-unaware mode.

Astuce

  1. Si vous avez fermé la barre d’informations et que vous souhaitez redémarrer Visual Studio en mode sans prise en charge DPI, utilisez l’outil DevEnv.exe.
  2. Si vous n’utilisez pas le concepteur, vous pouvez ignorer la barre d’informations. Vous pouvez également désactiver les notifications pour que la barre d’informations ne continue pas de s’afficher.

Redémarrer Visual Studio comme processus sans prise en charge DPI

La solution recommandée pour résoudre ces problèmes d’interface utilisateur consiste à redémarrer Visual Studio en tant que processus sans prise en charge DPI, ce qui signifie qu’il redémarre avec une mise à l’échelle de 100 % (96 DPI).

Pour basculer vers la non prise en charge DPI :

  • Sélectionnez l’option « Redémarrer Visual Studio avec une mise à l’échelle de 100 % » dans la barre d’informations jaune qui s’affiche quand vous ouvrez un formulaire dans le Concepteur Windows Forms.

Quand vous avez fini de travailler dans le Concepteur Windows Forms, il est important de redémarrer Visual Studio pour rétablir sa valeur par défaut, à savoir un processus avec prise en charge DPI.

Pour revenir à la prise en charge DPI :

  • Fermez et rouvrez Visual Studio pour revenir à la prise en charge DPI. Vous pouvez également sélectionner l’option Redémarrer Visual Studio comme processus avec prise en charge DPI dans la barre d’information.

Quand Visual Studio s’exécute sans prise en charge DPI, les problèmes de disposition du concepteur sont résolus, mais les polices peuvent apparaître floues et des problèmes peuvent survenir dans d’autres concepteurs comme le Concepteur XAML. Visual Studio affiche un message d’information différent en mode sans prise en charge DPI : « Visual Studio est exécuté comme processus sans prise en charge DPI. Les concepteurs WPF et XAML risquent de ne pas s’afficher correctement. »

Notes

  • Si vous avez des fenêtres Outil détachées, la position de ces fenêtres peut changer quand vous sélectionnez l’option de redémarrage de Visual Studio en tant que processus sans prise en charge DPI.
  • Si vous utilisez le profil Visual Basic par défaut ou si l’option Enregistrer les nouveaux projets lors de leur création est désélectionnée dans Outils>Options>Projets et solutions, Visual Studio ne peut pas rouvrir votre projet quand il redémarre comme processus sans prise en charge DPI. Toutefois, vous pouvez ouvrir le projet en le sélectionnant sous Fichier>Projets et solutions récents.

Notes

  • Si vous détachez des fenêtres Outil après avoir sélectionné l’option de redémarrage de Visual Studio en tant que processus sans prise en charge DPI, la position de ces fenêtres peut changer.
  • Le profil Visual Basic par défaut ne rouvre pas les projets quand Visual Studio redémarre en mode sans prise en charge DPI ignorant les ppp. Au lieu de cela, accédez à votre projet via Fichiers>Solutions et projets récents.

Utiliser Windows pour définir la mise à l’échelle de votre affichage sur 100 %

Pour éviter d’utiliser Visual Studio pour activer et désactiver la mise à l’échelle de l’affichage, ajustez la mise à l’échelle dans les paramètres Windows. Dans Windows 11 par exemple, vous pouvez définir la mise à l’échelle sur 100 % (96 DPI).

Pour cela, tapez paramètres d’affichage dans la zone de recherche de la barre des tâches, puis sélectionnez Modifier les paramètres d’affichage. Dans la fenêtre Paramètres, définissez Modifier la taille du texte, des applications et d’autres éléments avec la valeur 100 %. N’oubliez pas que la mise à l’échelle à 100 % (96 DPI) peut réduire l’interface utilisateur de telle manière qu’elle ne permet pas une utilisation pratique.

Désactiver la mise à l’échelle à l’aide de l’outil en ligne de commande DevEnv

Pour gérer vos paramètres d’affichage à l’aide d’outils en ligne de commande plutôt que d’outils d’interface utilisateur, utilisez DevEnv.exe. La commande devenv.exe prend /noscale comme paramètre de ligne de commande pour s’exécuter en mode de mise à l’échelle à 100 %. Voici comment l’utiliser :

  1. Sélectionnez Outils>Ligne de commande>Invite de commandes développeur dans la barre de menus de Visual Studio.
  2. Ensuite, entrez devenv /noScale.

Autres options

En plus des options mentionnées ci-dessus, vous pouvez essayer les options suivantes :

Dépanner

Si le passage au mode avec prise en charge DPI ne fonctionne pas dans Visual Studio, veillez à ce que la valeur dpiAwareness ne soit PAS présente dans la sous-clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe dans l’Éditeur du Registre. Si cette valeur est présente, supprimez-la.