Partager via


Prise en charge du DPI élevé dans Windows Forms

À partir de .NET Framework 4.7, Windows Forms inclut des améliorations pour les scénarios de haute PPP et PPP dynamiques courants. Voici quelques-uns des éléments suivants :

  • Améliorations apportées au redimensionnement et à la disposition d’un certain nombre de contrôles Windows Forms, tels que le contrôle MonthCalendar et le contrôle CheckedListBox.

  • Mise à l’échelle à passe unique. Dans .NET Framework 4.6 et les versions antérieures, la mise à l’échelle a été effectuée via plusieurs passes, ce qui a entraîné la mise à l’échelle de certains contrôles plus que nécessaire.

  • Prise en charge des scénarios DPI dynamiques dans lesquels l’utilisateur modifie le facteur DPI ou de mise à l’échelle après le lancement d’une application Windows Forms.

Dans les versions du .NET Framework à partir de .NET Framework 4.7, la prise en charge améliorée des paramètres haute résolution est une fonctionnalité facultative. Vous devez configurer votre application pour en tirer parti.

Configuration de votre application Windows Forms pour prendre en charge de haute résolution

Important

Ces informations s’appliquent uniquement au .NET Framework. Pour activer la prise en charge de la haute résolution dans .NET, consultez les paramètres de l'application au niveau du projet pour obtenir plus d'informations.

Les nouvelles fonctionnalités de Windows Forms qui prennent en charge la compatibilité avec les hautes résolutions DPI sont disponibles uniquement dans les applications qui ciblent le .NET Framework 4.7 et qui s’exécutent sur les systèmes d’exploitation Windows, à partir de la version Windows 10 Creators Update.

De plus, pour configurer une prise en charge du DPI élevé dans votre application Windows Forms, vous devez effectuer les opérations suivantes :

  • Déclarez la compatibilité avec Windows 10.

    Pour ce faire, ajoutez ce qui suit à votre fichier manifeste :

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • Activez la prise en charge DPI par moniteur dans le fichier app.config.

    Windows Forms introduit un nouvel <System.Windows.Forms.ApplicationConfigurationSection> élément pour prendre en charge de nouvelles fonctionnalités et personnalisations ajoutées à partir du .NET Framework 4.7. Pour tirer parti des nouvelles fonctionnalités qui prennent en charge des ppp élevés, ajoutez ce qui suit au fichier de configuration de votre application.

    <configuration>
      <!-- ... other xml settings ... -->
    
      <System.Windows.Forms.ApplicationConfigurationSection>
        <add key="DpiAwareness" value="PerMonitorV2" />
      </System.Windows.Forms.ApplicationConfigurationSection>
    
    </configuration>
    

    Important

    Dans les versions précédentes du .NET Framework, vous utilisiez le manifeste pour ajouter une prise en charge du DPI élevé. Cette approche n’est plus recommandée, car elle remplace les paramètres définis sur le fichier app.config.

  • Appelez la méthode statique EnableVisualStyles .

    Il doit s’agir du premier appel de méthode dans votre point d’entrée d’application. Par exemple:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form2());
    }
    

Désactivation des fonctionnalités individuelles à haute résolution DPP

Important

Ces informations s’appliquent uniquement au .NET Framework. Pour activer la prise en charge de la haute résolution dans .NET, consultez les paramètres de l'application au niveau du projet pour obtenir plus d'informations.

Définir la valeur DpiAwareness à PerMonitorV2 active toutes les fonctionnalités de reconnaissance des DPI élevés prises en charge par les versions de .NET Framework à partir de la version 4.7. En règle générale, cela convient à la plupart des applications Windows Forms. Toutefois, vous pouvez refuser une ou plusieurs fonctionnalités individuelles. La raison la plus importante est que votre code d’application existant gère déjà cette fonctionnalité. Par exemple, si votre application gère la mise à l’échelle automatique, vous pouvez désactiver la fonctionnalité de redimensionnement automatique comme suit :

<configuration>
  <!-- ... other xml settings ... -->

  <System.Windows.Forms.ApplicationConfigurationSection>
    <add key="DpiAwareness" value="PerMonitorV2" />
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
  </System.Windows.Forms.ApplicationConfigurationSection>

</configuration>

Pour obtenir la liste des clés individuelles et de leurs valeurs, consultez Windows Forms Ajouter un élément de configuration.

Nouveaux événements de modification DPI

À compter de .NET Framework 4.7, trois nouveaux événements vous permettent de gérer par programmation les modifications dynamiques des PPP :

  • DpiChangedAfterParent, qui est déclenché lorsque le paramètre DPI d’un contrôle est modifié par programmation après qu’un événement de changement de DPI pour son contrôle parent ou formulaire a eu lieu.
  • DpiChangedBeforeParent, qui est déclenché lorsque le paramètre DPI d'un contrôle est modifié par programmation avant qu'un événement de changement de DPI pour son contrôle parent ou son formulaire ne se soit produit.
  • DpiChanged, qui est déclenché lorsque le réglage DPI change sur l’appareil d’affichage où le formulaire est actuellement affiché.

Nouvelles méthodes et propriétés utilitaires

.NET Framework 4.7 ajoute également un certain nombre de nouvelles méthodes et propriétés d’assistance qui fournissent des informations sur la mise à l’échelle des ppp et vous permettent d’effectuer une mise à l’échelle des ppp. Voici quelques-uns des éléments suivants :

Considérations relatives au contrôle de version

Outre l’exécution sur .NET Framework 4.7 et Windows 10 Creators Update, votre application peut également s’exécuter dans un environnement dans lequel elle ne prend pas en charge les améliorations pour les hautes résolutions d'affichage. Dans ce cas, vous devez développer une solution de repli pour votre application. Pour ce faire, vous pouvez effectuer un dessin personnalisé pour gérer la mise à l’échelle.

Pour ce faire, vous devez également déterminer le système d’exploitation sur lequel votre application s’exécute. Pour ce faire, vous pouvez utiliser du code comme suit :

// Create a reference to the OS version of Windows 10 Creators Update.
Version OsMinVersion = new Version(10, 0, 15063, 0);

// Access the platform/version of the current OS.
Console.WriteLine(Environment.OSVersion.Platform.ToString());
Console.WriteLine(Environment.OSVersion.VersionString);

// Compare the current version to the minimum required version.
Console.WriteLine(Environment.OSVersion.Version.CompareTo(OsMinVersion));

Notez que votre application ne détecte pas Correctement Windows 10 s’il n’a pas été répertorié comme système d’exploitation pris en charge dans le manifeste de l’application.

Vous pouvez également vérifier la version du .NET Framework contre laquelle l'application a été construite.

Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName);

Voir aussi