Prise en charge de haute résolution dans les Windows FormsHigh DPI support in Windows Forms

À compter de .NET Framework 4.7, Windows Forms inclut des améliorations pour la haute résolution courants et scénarios de résolution dynamiques.Starting with the .NET Framework 4.7, Windows Forms includes enhancements for common high DPI and dynamic DPI scenarios. Elles incluent notamment :These include:

  • Améliorations de la mise à l’échelle et la disposition d’un nombre de Windows Forms des contrôles, tels que le MonthCalendar contrôle et le CheckedListBox contrôle.Improvements in the scaling and layout of a number of Windows Forms controls, such as the MonthCalendar control and the CheckedListBox control.

  • Mise à l’échelle seul passage.Single-pass scaling. Dans le .NET Framework 4.6 et les versions antérieures, la mise à l’échelle a été effectuée via plusieurs passes, ce qui a provoqué des contrôles à l’échelle plus de données nécessaires.In the .NET Framework 4.6 and earlier versions, scaling was performed through multiple passes, which caused some controls to be scaled more than was necessary.

  • Prise en charge pour les scénarios de résolution dynamiques dans lequel l’utilisateur modifie le facteur de PPP ou mise à l’échelle après le lancement d’une application Windows Forms.Support for dynamic DPI scenarios in which the user changes the DPI or scale factor after a Windows Forms application has been launched.

Dans les versions du .NET Framework en commençant par le .NET Framework 4.7, une prise en charge améliorée de la haute résolution est une fonctionnalité à activer.In versions of the .NET Framework starting with the .NET Framework 4.7, enhanced high DPI support is an opt-in feature. Vous devez configurer votre application pour tirer parti de celui-ci.You must configure your application to take advantage of it.

Configuration de votre application Windows Forms pour la prise en charge de haute résolutionConfiguring your Windows Forms app for high DPI support

Les nouvelles fonctionnalités de Windows Forms qui prennent en charge de la prise en charge DPI élevé sont disponibles uniquement dans les applications qui ciblent le .NET Framework 4.7 et sont en cours d’exécution sur les systèmes d’exploitation Windows en commençant par Windows 10 Creators Update.The new Windows Forms features that support high DPI awareness are available only in applications that target the .NET Framework 4.7 and are running on Windows operating systems starting with the Windows 10 Creators Update.

En outre, pour configurer la prise en charge de haute résolution dans votre application Windows Forms, vous devez procédez comme suit :In addition, to configure high DPI support in your Windows Forms application, you must do the following:

  • Déclarer la compatibilité avec Windows 10.Declare compatibility with Windows 10.

    Pour ce faire, ajoutez le code suivant à votre fichier manifeste :To do this, add the following to your manifest file:

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • Activer la sensibilisation à la résolution par moniteur dans le app.config fichier.Enable per-monitor DPI awareness in the app.config file.

    Windows Forms propose un nouveau <System.Windows.Forms.ApplicationConfigurationSection> élément pour prendre en charge les nouvelles fonctionnalités et les personnalisations ajoutées en commençant par le .NET Framework 4.7.Windows Forms introduces a new <System.Windows.Forms.ApplicationConfigurationSection> element to support new features and customizations added starting with the .NET Framework 4.7. Pour tirer parti des nouvelles fonctionnalités qui prennent en charge la haute résolution, ajoutez le code suivant au fichier de configuration de votre application.To take advantage of the new features that support high DPI, add the following to your application configuration file.

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

    Important

    Dans les versions précédentes du .NET Framework, vous avez utilisé le manifeste pour ajouter la prise en charge de haute résolution.In previous versions of the .NET Framework, you used the manifest to add high DPI support. Cette approche n’est plus recommandée, car il substitue les paramètres définis dans le fichier app.config.This approach is no longer recommended, since it overrides settings defined on the app.config file.

  • Appelez la méthode statique EnableVisualStyles (méthode).Call the static EnableVisualStyles method.

    Il doit s’agir du premier appel de méthode dans le point d’entrée de votre application.This should be the first method call in your application entry point. Exemple :For example:

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

Désactivation de la fonctionnalités de PPP élevées individuellesOpting out of individual high DPI features

Définition de la DpiAwareness valeur PerMonitorV2 Active les fonctionnalités de la reconnaissance PPP élevées tout pris en charge par les versions du .NET Framework en commençant par le .NET Framework 4.7.Setting the DpiAwareness value to PerMonitorV2 enables all high DPI awareness features supported by .NET Framework versions starting with the .NET Framework 4.7. En règle générale, cela est suffisant pour la plupart des applications Windows Forms.Typically, this is adequate for most Windows Forms applications. Toutefois, vous souhaiterez refuser un ou plusieurs des fonctionnalités individuelles.However, you may want to opt out of one or more individual features. La raison la plus importante pour cette opération est que votre code d’application existant gère déjà cette fonctionnalité.The most important reason for doing this is that your existing application code already handles that feature. Par exemple, si votre application gère la mise à l’échelle automatique, vous souhaiterez désactiver la fonctionnalité de redimensionnement automatique comme suit :For example, if your application handles auto scaling, you might want to disable the auto-resizing feature as follows:

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

Pour obtenir la liste des clés individuelles et leurs valeurs, consultez élément de Configuration Add Windows Forms.For a list of individual keys and their values, see Windows Forms Add Configuration Element.

Nouveaux événements de modification de PPPNew DPI change events

À compter de .NET Framework 4.7, trois nouveaux événements vous autorise à gérer par programme les modifications de résolution dynamiques :Starting with the .NET Framework 4.7, three new events allow you to programmatically handle dynamic DPI changes:

  • DpiChangedAfterParent, qui est déclenché quand le paramètre DPI d’un contrôle est modifié par programme après un événement de modification de PPP pour le contrôle de son parent ou formulaire s’est produite.DpiChangedAfterParent, which is fired when the DPI setting for a control is changed programmatically after a DPI change event for it's parent control or form has occurred.
  • DpiChangedBeforeParent, qui est déclenché lorsque le paramètre DPI d’un contrôle est modifié par programme avant qu’un événement de modification de PPP pour son contrôle parent ou le formulaire s’est produite.DpiChangedBeforeParent, which is fired when the DPI setting for a control is changed programmatically before a DPI change event for its parent control or form has occurred.
  • DpiChanged, qui est déclenché lorsque le paramètre DPI est modifié sur le périphérique d’affichage dans lequel le formulaire est actuellement affiché.DpiChanged, which is fired when the DPI setting changes on the display device where the form is currently displayed.

Propriétés et nouvelles méthodes d’assistanceNew helper methods and properties

Le .NET Framework 4.7 ajoute également un nombre de nouvelles méthodes d’assistance et des propriétés qui fournissent des informations sur la mise à l’échelle PPP et que vous puissiez effectuer la mise à l’échelle PPP.The .NET Framework 4.7 also adds a number of new helper methods and properties that provide information about DPI scaling and allow you to perform DPI scaling. Elles incluent notamment :These include:

Considérations relatives à la gestion des versionsVersioning considerations

Outre l’exécution sur .NET Framework 4.7 et Windows 10 Creators Update, votre application peut également exécuter dans un environnement dans lequel il n’est pas compatible avec les améliorations de PPP élevées.In addition to running on .NET Framework 4.7 and Windows 10 Creators Update, your application may also run in an environment in which it isn't compatible with high DPI improvements. Dans ce cas, vous devez développer une procédure de secours pour votre application.In this case, you'll need to develop a fallback for your application. Vous pouvez le faire pour effectuer dessin personnalisé pour gérer la mise à l’échelle.You can do this to perform custom drawing to handle scaling.

Pour ce faire, vous devez également déterminer le système d’exploitation sur lequel votre application est en cours d’exécution.To do this, you also need to determine the operating system on which your app is running. Vous pouvez le faire avec un code semblable au suivant :You can do that with code like the following:

// 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 avec succès Windows 10 si elle n’a pas été répertoriée comme un système d’exploitation pris en charge dans le manifeste d’application.Note that your application won't successfully detect Windows 10 if it wasn't listed as a supported operating system in the application manifest.

Vous pouvez également vérifier la version du .NET Framework que l’application a été développée pour :You can also check the version of the .NET Framework that the application was built against:

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

Voir aussiSee also