Compartilhar via


Como: Responder às mudanças de esquema de fonte em um aplicativo do Windows Forms

Nos sistemas operacionais do Windows, um usuário pode alterar as configurações de fonte de todo o sistema para tornar a fonte padrão maior ou menor. Alterar essas configurações de fonte é fundamental para os usuários que possuem deficiência visual e exigem letras maiores para ler o texto em suas telas. Você pode ajustar seu aplicativo de Formulários do Windows para reagir a essas alterações aumentando ou diminuindo o tamanho do formulário e todo o texto contido nele sempre que o esquema de fontes for alterado. Se você desejar a forma acomodar alterações de tamanhos de fonte dinamicamente, você pode adicionar código ao seu formulário.

Normalmente, a fonte padrão usada pelo Formulários do Windows é a fonte retornada pela chamada GetStockObject(DEFAULT_GUI_FONT) à namespace Microsoft.Win32. A fonte retornada por essa chamada muda somente quando a resolução da tela muda. Conforme mostrado no procedimento o seguir, o código deve alterar a fonte padrão para IconTitleFont para responder às alterações em tamanho da fonte.

Para usar a fonte da área de trabalho e responder às alterações do esquema de fonte.

  1. Crie seu formulário e adicione os controles desejados a ele. Para obter mais informações, consulte Como: Criar um aplicativo de formulários do Windows a partir da linha de comando e Controles para uso no Windows Forms.

  2. Adicione uma referência para o namespace Microsoft.Win32 ao seu código.

    Imports Microsoft.Win32
    
    using Microsoft.Win32;
    
  3. Adicione o código seguinte ao construtor de seu formulário para ligar os manipuladores de evento necessários e alterar a fonte padrão em uso no formulário.

    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. Implemente um manipulador para o evento UserPreferenceChanged que faz com que o formulário se redimensione automaticamente quando a categoria Window muda.

    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. Finalmente, implemente um manipulador para o evento FormClosing que dispara o manipulador de eventos UserPreferenceChanged.

Observação importanteImportante

Uma falha ao adicionar este código fará com que seu aplicativo ultrapasse memória.

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. Compilar e executar o código.

Para alterar manualmente o esquema de fontes no Windows XP.

  1. Enquanto seu aplicativo de Formulários do Windows está sendo executado, clique com o botão direito do mouse na área de trabalho do Windows e escolha Propriedades no menu popup

  2. Na caixa de diálogo Propriedades de Vídeo , clique na guia Aparência.

  3. Da lista suspensa Tamanho da Fonte , selecione um novo tamanho da fonte.

    Você observará que o formulário agora reage a alterações no esquema de fontes da área de trabalho em tempo de execução. Quando o usuário altera entre Normal , Fontes Grandes e Fontes Extragrandes , o formulário muda a fonte e redimensiona corretamente.

Exemplo

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);
        }
    }
}

O construtor neste código exemplo contém uma chamada para InitializeComponent, que é definida quando você cria um novo projeto de Formulários do Windows no Visual Studio. Remova esta linha de código se você estiver criando seu aplicativo na linha de comando.

Consulte também

Referência

PerformAutoScale

Conceitos

Dimensionamento Automático em Formulários do Windows