Share via


Comment : répondre aux modifications de jeu de polices dans une application Windows Forms

Dans les systèmes d'exploitation Windows, un utilisateur peut modifier les paramètres de police à l'échelle du système pour que la police par défaut apparaisse dans une taille plus grande ou plus petite. La modification de ces paramètres de police est critique pour les utilisateurs souffrant d'une faible acuité visuelle et qui nécessitent la présence d'un texte en gros caractères sur leurs écrans. Vous pouvez ajuster votre application Windows Forms de façon à tenir compte de ces modifications en augmentant ou en diminuant la taille du formulaire et de tout le contenu du texte chaque fois que le jeu de polices change. Si vous souhaitez que votre formulaire s'adapte dynamiquement aux modifications intervenant dans les tailles de polices, vous pouvez ajouter du code à votre formulaire.

En général, la police par défaut utilisée par les Windows Forms est la police retournée par l'appel de l'espace de noms Microsoft.Win32 à GetStockObject(DEFAULT_GUI_FONT). La police retournée par cet appel change uniquement lorsque la résolution d'écran change. Comme indiqué dans la procédure suivante, votre code doit remplacer la police par défaut par IconTitleFont afin de tenir compte des modifications dans la taille de police.

Pour utiliser la police de bureau et répondre aux modifications de jeu de polices

  1. Créez votre formulaire et ajoutez-lui les contrôles de votre choix. Pour plus d'informations, consultez Comment : créer une application Windows Forms à partir de la ligne de commande et Contrôles à utiliser dans les Windows Forms.

  2. Ajoutez une référence à l'espace de noms Microsoft.Win32 de votre code.

    Imports Microsoft.Win32
    
    using Microsoft.Win32;
    
  3. Ajoutez le code suivant au constructeur de votre formulaire pour effectuer le raccordement des gestionnaires d'événements requis, et modifier la police par défaut utilisée pour le formulaire.

    Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
    
        ' Add any initialization after the InitializeComponent() call.
        AddHandler SystemEvents.UserPreferenceChanged, New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UserPreferenceChangesEventHandler)
    End Sub
    
    this.Font = SystemFonts.IconTitleFont;
    SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
    
  4. Implémentez un gestionnaire pour l'événement UserPreferenceChanged qui fait que le formulaire s'adapte automatiquement lors du changement de la catégorie Window.

    Private Sub SystemEvents_UserPreferenceChangesEventHandler(ByVal sender As Object, ByVal e As UserPreferenceChangedEventArgs)
        If (e.Category = UserPreferenceCategory.Window) Then
            Me.Font = SystemFonts.IconTitleFont
        End If
    End Sub
    
    void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
    {
        if (e.Category == UserPreferenceCategory.Window)
        {
            this.Font = SystemFonts.IconTitleFont;
        }
    }
    
  5. Enfin, implémentez un gestionnaire pour l'événement FormClosing qui détache le gestionnaire d'événements UserPreferenceChanged.

Important

Si ce code n'est pas inclus, votre application connaîtra une fuite de mémoire.

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    RemoveHandler SystemEvents.UserPreferenceChanged, New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UserPreferenceChangesEventHandler)
End Sub
void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
}
  1. Compilez et exécutez le code.

Pour modifier manuellement le jeu de polices dans Windows XP

  1. Pendant que votre application Windows Forms s'exécute, cliquez avec le bouton droit sur le bureau de Windows et choisissez Propriétés dans le menu contextuel.

  2. Dans la boîte de dialogue Propriétés d'affichage, cliquez sur l'onglet Apparence.

  3. De la zone de liste déroulante Taille de police, sélectionnez une nouvelle taille de police.

    Vous remarquerez que le formulaire réagit maintenant aux modifications effectuées au moment de l'exécution dans le jeu de polices de bureau. Lorsque l'utilisateur bascule entre Normal, Grandes polices et Très grands caractères, le formulaire modifie correctement polices et échelles.

Exemple

Imports Microsoft.Win32

Public Class Form1
    Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        AddHandler SystemEvents.UserPreferenceChanged, New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UserPreferenceChangesEventHandler)
    End Sub

    Private Sub SystemEvents_UserPreferenceChangesEventHandler(ByVal sender As Object, ByVal e As UserPreferenceChangedEventArgs)
        If (e.Category = UserPreferenceCategory.Window) Then
            Me.Font = SystemFonts.IconTitleFont
        End If
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        RemoveHandler SystemEvents.UserPreferenceChanged, New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UserPreferenceChangesEventHandler)
    End Sub
End Class
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace WinFormsAutoScaling
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            this.Font = SystemFonts.IconTitleFont;
            SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        }

        void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
        {
            if (e.Category == UserPreferenceCategory.Window)
            {
                this.Font = SystemFonts.IconTitleFont;
            }
        }

        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
        }
    }
}

Dans cet exemple de code, le constructeur contient un appel à InitializeComponent, qui est défini lorsque vous créez un nouveau projet Windows Forms dans Visual Studio. Supprimez cette ligne de code si vous générez votre application à partir de la ligne de commande.

Voir aussi

Référence

PerformAutoScale

Concepts

Mise à l'échelle automatique dans les Windows Forms