Приложение Windows - проблемы с DPI - PullRequest
5 голосов
/ 03 ноября 2011

У нас проблема с одним из наших существующих приложений на базе Win32 MFC.Он не отображается правильно на дисплеях, которые используют настройки с высоким разрешением.В частности, в Windows XP с выбранным разрешением 120 т / д в приложении есть несколько мест, где текст масштабируется, но не его контейнеры (текст, выходящий за границы его кнопки и т. Д.).Это также происходит в Windows 7 (и Vista), когда выбрано> 96 точек на дюйм и выбрано «использовать масштабирование точек на дюйм в стиле XP».Если масштабирование в стиле xp не выбрано, я понимаю, что Win7 вместо этого использует виртуализацию DPI.При использовании виртуализации DPI все выглядит хорошо (все хорошо, но по крайней мере они правильные).По умолчанию в Win7 120 dpi использует масштабирование в стиле xp, а следующий параметр (144 dpi) - нет.Таким образом, наше приложение выглядит правильно при 144 dpi, но неправильно при 120 dpi.

Если я отредактирую манифест приложения, объявив его «DPI-совместимым», то это повернет виртуализацию DPI (но не масштабирование dpi в стиле XP) иэто меня никуда не приведет.Все выглядит очень плохо (без изменений для 120 т / д, теперь 144 т / д не работает).

Мне нужно исправить эту проблему, и я попытался прочитать вопросы о DPI / масштабировании в целом, и это было обучениеопыт.Пока я не нашел подходящего решения.На данный момент у меня нет намерения делать полное и правильное исправление (приложение корректно масштабирует все элементы в соответствии с dpi).Это будет включать много переписывания.Я думаю, что на самом деле есть два возможных решения.Одним из них является отключение любого вида масштабирования DPI все вместе.Это означало бы, что если бы пользовательская система Win7 была настроена на 120 dpi, то все в их системе выглядело бы хорошо / хорошо, но наше приложение выглядело бы правильно, но было бы небольшим по сравнению со всем остальным в других приложениях.Второе решение заключается в том, чтобы заставить наше приложение использовать виртуализацию DPI, но никогда не использовать масштабирование точек на дюйм в стиле XP.Я хочу, чтобы это было изменением на стороне приложения и не полагалось на то, что конечным пользователям придется вносить изменения в конфигурацию Windows.

Пока что я не нашел способа реализовать какое-либо решение.

Может кто-тоболее осведомлен в этом вопросе, пожалуйста, ответьте и укажите меня правильно?

Спасибо

1 Ответ

2 голосов
/ 30 августа 2013

Вы не можете принудительно установить виртуализацию DPI при настройках 120 DPI. Я сам исследовал это для продукта, потому что нечеткий вид в высоком DPI казался хорошим компромиссом.

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

Работа, чтобы сделать это правильно, заняла у одного парня ~ 3 месяца в нашем случае для довольно сложного клиента.

У нас был вторичный план, который мы никогда не пробовали, но он может сработать для вас: При запуске считайте масштабный коэффициент DPI ОС. Затем уменьшите все имеющиеся у вас шрифты на этот коэффициент, чтобы при повторном увеличении шрифтов в Windows они возвращались к размеру, соответствующему пользовательскому интерфейсу. Конечно, пользователи с высокими настройками DPI не получат более крупные шрифты в вашем приложении, но, по крайней мере, его можно будет использовать.

...