2012-02-21 2 views
37

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

Это работало отлично, пока люди с китайскими версиями 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 
} 

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

Итак, что такое хороший способ определения шкалы шрифтов Windows (100%, 125% и 150%) без обнаружения API? Мне нужно что-то твердое, которое будет работать на всех операционных системах и языках Windows 7.

+0

Я очень быстро печатал и делал несколько орфографических ошибок. Я хотел сказать «ДОИ» не «API». Извините –

+0

То, что вы описываете, звучит намного больше, как проблема с видеодрайвером и/или установленными шрифтами ... – Yahia

+0

Простое предложение: если у вас есть количество пользователей из числа китайских клиентов, стоит потратить некоторое время на создание как минимум 'VirtualMachine' для 'VirtualBox' или' VmWare', так что вы можете протестировать свое приложение на нем с ближайшей версией Fedelity до реального os, как это возможно. – Tigran

ответ

16

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

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

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

this.AutoScaleMode = AutoScaleMode.Dpi; 

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

+1

Я пробовал это сделать, но проблема в том, что мое приложение испортится с этим. –

+1

@user Что означает «беспорядок»? Что именно происходит не так? Как вы попытались отладить его?Используете ли вы относительное позиционирование для своих элементов управления, например, помещая их в контейнеры и устанавливая свойства «Anchor» и «Dock»? Абсолютное позиционирование никогда не будет работать, даже если пользователь изменяет шрифт/размер шрифта по умолчанию, а тем более, когда участвует DPI. –

+8

с помощью AutoScaleMode.none исправил мою проблему! –

Смежные вопросы