Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Nos sistemas operacionais Windows, um usuário pode alterar as configurações de fonte em todo o sistema para fazer com que a fonte padrão pareça maior ou menor. Alterar essas configurações de fonte é fundamental para usuários com deficiência visual e que precisam de um tipo maior para ler o texto em suas telas. Você pode ajustar seu aplicativo Windows Forms para reagir a essas alterações aumentando ou diminuindo o tamanho do formulário e todo o texto contido sempre que o esquema de fontes mudar. Se desejar que o formulário acomode alterações nos tamanhos de fonte dinamicamente, você pode adicionar código ao formulário.
Normalmente, a fonte padrão usada pelo Windows Forms é a fonte retornada pela chamada de namespace Microsoft.Win32 para GetStockObject(DEFAULT_GUI_FONT)
. A fonte retornada por essa chamada só muda quando a resolução da tela é alterada. Conforme mostrado no procedimento a seguir, seu código deve alterar a fonte padrão para IconTitleFont para responder a alterações no tamanho da fonte.
Para usar a fonte da área de trabalho e responder às alterações do esquema de fontes
Crie seu formulário e adicione os controles desejados a ele. Para obter mais informações, consulte Como criar um aplicativo do Windows Forms a partir do de linha de comando e controles a serem usados no Windows Forms.
Adicione uma referência ao namespace Microsoft.Win32 ao seu código.
using Microsoft.Win32;
Imports Microsoft.Win32
Adicione o código a seguir ao construtor do formulário para conectar os manipuladores de eventos necessários e alterar a fonte padrão em uso para o formulário.
this.Font = SystemFonts.IconTitleFont; SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged); this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
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
Implemente um manipulador para o evento UserPreferenceChanged que faz com que o formulário seja dimensionado automaticamente quando a categoria Window for alterada.
void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { if (e.Category == UserPreferenceCategory.Window) { this.Font = SystemFonts.IconTitleFont; } }
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
Finalmente, implemente um manipulador para o evento FormClosing que desanexa o manipulador de eventos UserPreferenceChanged.
Importante
A não inclusão desse código fará com que seu aplicativo vaze memória.
void Form1_FormClosing(object sender, FormClosingEventArgs e) { SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged); }
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
Compile e execute o código.
Para alterar manualmente o esquema de fontes no Windows XP
Enquanto o aplicativo Windows Forms estiver em execução, clique com o botão direito do mouse na área de trabalho do Windows e escolha Propriedades no menu de atalho.
Na caixa de diálogo Propriedades do Ecrã, clique no separador Aparência.
Na caixa de listagem suspensa Tamanho da Fonte, selecione um novo tamanho de fonte.
Você notará que o formulário agora reage a alterações em tempo de execução no esquema de fontes da área de trabalho. Quando o usuário muda entre Normal, Fontes Grandese Fontes Extra Grandes, o formulário altera a fonte e é dimensionado corretamente.
Exemplo
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);
}
}
}
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
O construtor neste exemplo de código contém uma chamada para InitializeComponent
, que é definida quando você cria um novo projeto do Windows Forms no Visual Studio. Remova essa linha de código se você estiver criando seu aplicativo na linha de comando.
Ver também
.NET Desktop feedback