Подтвердить что ты не робот

Определить размер шрифта 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.

4b9b3361

Ответ 1

Правильный способ обработки переменных параметров DPI заключается не в том, чтобы обнаружить их и вручную настроить размеры элементов управления в операторе switch (для начала есть гораздо больше возможностей, чем те, которые вы показываете в своем примере if),.

Вместо этого вы должны установить AutoScaleMode свойство вашей формы в AutoScaleMode.Dpi и позволить инфраструктуре позаботиться об этом для вас.

Добавьте следующий код в конструктор формы (или установите это свойство во время разработки):

this.AutoScaleMode = AutoScaleMode.Dpi;

Хотя вы можете использовать AutoScaleMode.Font. Для получения дополнительной информации об автоматическом масштабировании см. документацию MSDN.