среда, 5 августа 2009 г.

Шрифты диалога по умолчанию

Еще давно, разрабатывая приложения на С++ и WTL я сталкивался с задачей, в которой было плохо понятно, какой шрифт необходимо использовать для отображения текста на контролах в ОС Windows. Каждая новая версия Windows сопровождалась новыми шрифтами, которые использовались в системных диалогах по умолчанию. К примеру, в Windows 98 по умолчанию диалоговый шрифт был "MS Sans Serif", затем, с выходом Windows XP - "Tahoma", Windows Vista и Windows 7 - "Segoe UI". С каждой новой версией шрифты становились более приятными глазу (это уже лично мое мнение), но нельзя было точно понять, какой же шрифт система использует по умолчанию для отображения диалогов. Кстати, когда я говорю о диалогах, проще всего представить себе обычное сообщение об ошибке.
Оказалось, .NET 2.0 поддерживает определение основного шрифта системы. Сама же .NET по умолчанию использует "Microsoft Sans Serif", что не очень красиво смотрится в большинстве форм. "Microsoft Sans Serif" является усовершенствованным "MS Sans Serif" и, в отличие от последнего, поддерживает ClearType сглаживание.
Функцию изменения шрифта на системный можно написать примерно следующим образом:
public static void SetDialogFont(Control.ControlCollection controls)
{
foreach (Control c in controls)
{
Font old = c.Font;
c.Font = new Font(SystemFonts.MessageBoxFont.FontFamily.Name, old.Size, old.Style);
}
}
Все элементарно... Вы, конечно, можете попробовать использовать размер SystemFonts.MessageBoxFont.FontFamily.Size для контролов, но тогда никто не даст гарантии, что ваши контролы не "поплывут" после изменения размера шрифта, так как .NET контролы изменяют свой размер и подстраиваются под размер шрифта динамически.
Вызвать функцию SetDialogFont целесообразнее всего в конструкторе формы, сразу после функции InitializeComponent() (в которой, собственно, и создаются все объекты контролов).
public FormMain()
{
InitializeComponent();
SetDialogFont(Controls);

...
}
Ну вот, на этом все... Взглянем на результаты в Windows 7.
До:
После:
Надеюсь, это вам поможет в создании более симпатичных форм для ваших приложений.

Комментариев нет:

Отправить комментарий