Практическое руководство. Реагирование на изменения схемы шрифтов в приложениях Windows Forms
В операционных системах Windows пользователь может изменить параметры шрифта во всей системе, чтобы проверить шрифт по умолчанию отображаются, больше или меньше. Изменение этих параметров шрифта важно для пользователей с нарушениями зрения и требуют более длинный тип для чтения текста на экране компьютера. Вы можете настроить приложение Windows Forms реагировать на эти изменения путем увеличения или уменьшения размера формы и все содержащиеся в нем текст при каждом изменении шрифтовой схемы. Если требуется, чтобы формы в соответствии с изменениями в размерах шрифта динамически, можно добавить код в форму.
Как правило, шрифт по умолчанию, используемые в Windows Forms используется шрифт, возвращенный Microsoft.Win32 вызов пространства имен GetStockObject(DEFAULT_GUI_FONT)
. Шрифт, возвращаемый при вызове этого метода изменяется только при изменении разрешения экрана. Как показано в следующей процедуре, ваш код должен изменить шрифт по умолчанию для IconTitleFont реагировать на изменения размера шрифта.
Чтобы использовать шрифт рабочего стола и реагировать на изменения схемы шрифтов
Создайте форму и добавьте элементы управления к нему. Дополнительные сведения см. в разделе Как Создание приложения Windows Forms из командной строки и элементы управления для использования в формах Windows Forms.
Добавьте ссылку на Microsoft.Win32 пространства имен в код.
using Microsoft.Win32;
Добавьте следующий код в конструктор формы для привязки обработчиков событий, а также изменять шрифт по умолчанию используется для формы.
this.Font = SystemFonts.IconTitleFont; SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged); this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
Реализовать обработчик для UserPreferenceChanged событие, которое приводит к автоматическому масштабированию формы при Window категории изменения.
void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { if (e.Category == UserPreferenceCategory.Window) { this.Font = SystemFonts.IconTitleFont; } }
Наконец, Реализуйте обработчик для FormClosing событие, которое отсоединяет UserPreferenceChanged обработчик событий.
Important
Если не добавить этот код вызовет утечка памяти.
void Form1_FormClosing(object sender, FormClosingEventArgs e) { SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged); }
Скомпилируйте и запустите код.
Для ручного изменения схемы шрифтов в Windows XP
Пока выполняется приложение Windows Forms, щелкните правой кнопкой мыши рабочий стол Windows и выберите свойства в контекстном меню.
В свойства отображения диалоговом окне щелкните внешний вид вкладки.
Из размер шрифта раскрывающемся списке выберите новый размер шрифта.
Вы заметите, что форма теперь реагирует на изменения схемы шрифтов рабочего стола во время выполнения. Когда пользователь изменяет между обычный, крупного шрифта, и Огромный шрифт, форма изменяет шрифт и корректно масштабируется.
Пример
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);
}
}
}
Конструктор в этом примере код содержит вызов InitializeComponent
, который определяется при создании нового проекта Windows Forms в Visual Studio. Удалите эту строку кода, при создании приложения в командной строке.