Определить размер шрифта Windows (100%, 125%, 150%)
Я создал приложение, которое отлично работает, пока пользователь не выберет 125% или 150%. Это нарушит мое выражение. Позже я нашел способ найти размер шрифта, обнаружив DPI.
Это работало отлично, пока люди с китайскими версиями Windows 7 не начали использовать мое приложение. Все приложение разбивается на китайские окна 7. Из того, что я могу сказать (я не могу его проверить, потому что у меня только английская версия и установка языковых пакетов не вызывает проблемы). Китайские символы вызывают странный DPI, который ломает мое приложение.
мой текущий код работает следующим образом:
if (dpi.DpiX == 120) //For 125% fonts
{
//Resize form and set default font to correct problems
}
else if (dpi.DpiX == 96) //For 100 and 150% fonts
{
//Resize form and set default font to correct problems
}
В английских версиях Windows 7, которые отлично работают, но как-то китайские версии проскакивают прямо, и форма уничтожает себя, причем элементы управления даже не отображаются, шрифт чрезвычайно большой и проталкивает проблему, а коробки изображений перемещаются.
Итак, что такое хороший способ определить масштаб шрифта Windows (100%, 125% и 150%) без обнаружения API? Мне нужно что-то твердое, которое будет работать на всех операционных системах и языках Windows 7.
Ответы
Ответ 1
Правильный способ обработки переменных параметров DPI заключается не в том, чтобы обнаружить их и вручную настроить размеры элементов управления в операторе switch
(для начала есть гораздо больше возможностей, чем те, которые вы показываете в своем примере if
),.
Вместо этого вы должны установить AutoScaleMode
свойство вашей формы в AutoScaleMode.Dpi
и позволить инфраструктуре позаботиться об этом для вас.
Добавьте следующий код в конструктор формы (или установите это свойство во время разработки):
this.AutoScaleMode = AutoScaleMode.Dpi;
Хотя вы можете использовать AutoScaleMode.Font
. Для получения дополнительной информации об автоматическом масштабировании см. документацию MSDN.
Ответ 2
Для пользователей С++/Win32 это хорошая ссылка: Написание приложений с высоким разрешением DPI Win32.