Я ломаю себе голову, пытаясь понять несоответствие между размеры шрифта, которые пользователи выбирают или задают (например, используя FontDialog ), и размер em, сообщаемый классом Font в .NET.
Например:
using (FontDialog dlg = new FontDialog()) {
if (dlg.ShowDialog() == DialogResult.OK) {
Console.WriteLine("Selected font size: " + dlg.Font.SizeInPoints.ToString("0.##"));
}
}
Используя приведенный выше код, вы получите меня сбивают с толку результаты:
Выбор 11 в диалоговом окне дает 11,25
Выбор 12 в диалоговом окне дает 12
Выбор 14 в диалоговом окне дает 14,25
Выбор 16 в диалоговом окне дает 15,75
Такое поведение происходит независимо от того, какой шрифт вы выберете. Как видно из вышесказанного, в расхождении нет никакой закономерности, кажется, что оно варьируется случайным образом от +0,25 до -0,25.
Я обхожу это в пользовательских интерфейсах, отображая размер шрифта только как округленное целое число, но я клянусь, что видел пакеты текстового редактора / DTP, которые позволяют пользователям выбирать дробные размеры шрифта - и эти пакеты не отображаются указанное выше поведение при взаимодействии с диалоговыми окнами шрифтов Windows.
Может ли кто-нибудь дать этому рациональное объяснение? Есть ли передовой метод отображения размера шрифта в пользовательском интерфейсе? Как насчет того, чтобы пользователю был нужен дробный размер, например «10,5»?
в несоответствии нет закономерности
Как видите, размер шрифта задается с шагом 0,75.
Изменить: вы можете точно настроить размеры, если не используете диалог шрифтов, но результаты, как я подозреваю, будут менее приятными, чем «предпочтительные» размеры.