Как заставить приложение winforms использовать шрифты / размеры шрифтов, указанные на каждой машине? - PullRequest
4 голосов
/ 15 июня 2010

Как заставить приложение winforms использовать шрифты / размеры шрифтов, указанные на каждой машине? У меня есть приложение на c #, в котором кажется, что размер шрифта изменяется на другом компьютере, и это не разрешение. Это на Windows 7 с приложением C #. Есть ли способ заставить размер шрифта, который я хочу, или пользовательские шрифты всегда отменяют?

Ответы [ 2 ]

12 голосов
/ 15 июня 2010

Размеры шрифта указаны в пунктах.Одна точка составляет 1/72 дюйма.Проблема заключается в том, что это должно сочетаться с остальными формами Windows Forms, где почти все указано в пикселях.Вопрос в том, сколько пикселей имеют смысл.Это зависит от настроек точек на дюйм вашего видеоадаптера.

Традиционная настройка - 96 точек на дюйм.Поэтому, если вы попросите 9-точечный шрифт, вы получите тот, который имеет высоту 9/72 * 96 = 12 пикселей.Пока клиентская область элемента управления имеет высоту не менее 12 пикселей, текст, отображаемый внутри, не будет обрезан.

Однако можно изменить настройку DPI видеоадаптера.В XP это немного усложнило, для этого нужно было перейти в расширенные настройки апплета Display.В Vista все стало намного проще, есть прямая ссылка на него с хорошей линейкой и еще много чего.

Следующая общая настройка - 120 DPI, на 125% больше точек на дюйм.Этот 9-точечный шрифт теперь нуждается в 9/72 * 120 = 15 пикселей.Если исходный элемент управления, отображающий этот текст, по-прежнему имеет 12 пикселей, текст будет обрезан.По сути, спуски срезаны.

Поэтому, чтобы это исправить, необходимо изменить свойство Control.Size элементов управления в форме.Они должны быть масштабированы, чтобы соответствовать большей настройке DPI.Windows Forms с готовностью поддерживает это.Это Form.AutoScaleMode, доступный с .NET 2.0.Когда вы задаете для него значение, отличное от None, включается автоматический код в Windows Forms, который компенсирует разницу между машиной, которая проектировала форму, и машиной, которая отображает форму.В случае с разрешением 120 DPI форма и элементы управления будут больше.Так что они могут отображать текст без его обрезки.

Но есть сложность.Изменение настройки DPI отлично подходит для шрифтов.TrueType - это потрясающая технология, способная воспроизводить хорошо выглядящий текст любого размера.Но изменение масштаба не очень хорошо работает для изображений, которые содержат штриховые рисунки.Они теряют лишние пиксели или размывают их при масштабировании.

Назад к шрифтам: ясно, что если вы измените настройку DPI монитора, пользователь будет ожидать, что шрифты будут следовать его примеру.Это, безусловно, сработало так еще в дни XP.Если вы измените настройку DPI видеоадаптера, вы получите приглашение перезагрузить операционную систему.Это было важно тогда, потому что было много программ, которые использовали шрифты устройства, а не шрифты TrueType.Не масштабируемые шрифты.Активированы новые шрифты, соответствующие настройкам DPI.Таким образом, большее значение DPI для видео соответствует большему базовому размеру системного шрифта.

Примерно в то же время некий гений в Microsoft, с тех пор как его убили, предложил действительно хорошую идею.Люди, которые живут в Восточной Азии, имеют систему письма, основанную на персонажах.Замысловатые глифы, которым нужно много пикселей, чтобы показать детали.12 пикселей при разрешении 96 точек на дюйм не оставляют много места для создания красивого китайского или корейского символа.Увеличение DPI, очевидно, улучшает это, но за счет нечетких изображений.Идея: увеличить базовый размер шрифта системы, но не изменять DPI видео.

Теперь есть новая проблема: как автоматически масштабировать пользовательский интерфейс.Это можно увидеть в значениях, которые можно назначить свойству AutoScaleMode, Font или DPI.Какой из них подходит для целевой машины, не легко догадаться.Шрифт, как правило, лучший выбор, так как вы хотите убедиться, что текст не обрезается.Однако, если вы хотите убедиться, что изображения отображаются в правильном размере, то вы хотите DPI.Когда вам нужны оба варианта, вы застряли между молотом и наковальней, из которых вы не сможете выйти, если базовый размер шрифта системы не будет соответствовать настройкам DPI.

1 голос
/ 15 июня 2010

Вы не можете сделать больше, чем указать размер шрифта, который вы предпочитаете. Если пользователь решит использовать шрифты большого размера (125% / 150%) или увеличитель, ваш размер шрифта будет увеличиваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...