Определить размер шрифта Windows (100%, 125% и 150%)

Я создал приложение, которое отлично работает, пока пользователь не выберет 125% или 150%. Это сломало бы мое заявление. Позже я нашел способ найти размер шрифта путем определения DPI.

Это работало отлично, пока люди с китайскими версиями Windows 7 не начали использовать мое приложение. Все приложение ломается на китайской Windows 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%) без определения DPI? Мне нужно что-то твердое, что будет работать на всех операционных системах и языках Windows 7.

 Tigran21 февр. 2012 г., 07:45
Просто предложение: если у вас есть большое количество китайских клиентов, стоит потратить некоторое время, чтобы создать по крайней мереVirtualMachine заVirtualBox или жеVmWareТаким образом, вы можете протестировать свое приложение на нем с максимально приближенной к реальной ОС функциональностью, насколько это возможно.
 Landin Martens21 февр. 2012 г., 07:40
Я печатал очень быстро и допустил несколько орфографических ошибок. Я хотел сказать «DPI», а не «API». сожалею
 David Heffernan21 февр. 2012 г., 08:31
Почему значение 150 dpi обозначено как 150%, и как вы думаете, настройки только 3 dpi? Пользователи могут установить множество других значений.
 Tigran21 февр. 2012 г., 08:02
Вы можете использовать свою собственную версиюwindowsУстановите китайский языковой пакет, установите региональные настройки в соответствии с местоположением ваших клиентов и проведите тестирование. Это займет один день или более
 Yahia21 февр. 2012 г., 07:40
То, что вы описываете, больше похоже на проблему с драйвером видео и / или установленными шрифтами ...

Ответы на вопрос(2)

Решение Вопроса

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

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

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

this.AutoScaleMode = AutoScaleMode.Dpi;

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

 Landin Martens22 февр. 2012 г., 07:59
использование AutoScaleMode.none решило мою проблему!
 Cody Gray♦21 февр. 2012 г., 19:34
@user Что значит "испортить"? Что именно идет не так? Как вы пытались его отладить? Используете ли вы относительное расположение элементов управления, например, помещая их в контейнеры и устанавливаяAnchor а такжеDock свойства? Абсолютное позиционирование никогда не сработает, даже когда пользователь меняет свой размер шрифта по умолчанию, тем более, когда задействуется DPI.
 TaW01 окт. 2014 г., 13:18
с помощьюAutoScaleMode.None исправил мою проблему тоже. Теоретически не перспективно, на самом деле это помогло против проблем с увеличением шрифта на 125%.
 Mahmoud Al-Qudsi20 мая 2012 г., 23:30
@ПриземлитьсяAutoScaleMode.None это именно то, что вы не должны использовать.
 Landin Martens21 февр. 2012 г., 10:54
Я пытался сделать это, но проблема в том, что мое приложение портится с этим
 Andy Terra08 окт. 2014 г., 18:49
Вот еще одна ссылкаtechnet.microsoft.com/en-us/library/dn528846.aspx

Ваш ответ на вопрос