Как я могу вынудить приложение winforms использовать fonts/fontsizes, который я указываю на каждой машине?

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

5
задан Matt 14 June 2010 в 21:28
поделиться

2 ответа

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

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

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

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

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

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

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

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

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

12
ответ дан 18 December 2019 в 14:42
поделиться

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

1
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: