Как заставить масштабирование с высоким разрешением?


27

Как заставить приложение масштабироваться с высоким разрешением?

  • Притворись, что есть приложение, разработчики которого проявили его как осведомленный с высоким разрешением, когда это действительно не так. Как я могу заставить dpi-масштабирование?

  • Притворись, что есть заявление, что Microsoft применила « HighDpiAware» прокладку совместимости, когда приложения на самом деле нет. Как я могу заставить dpi-масштабирование?

Как заставить Windows применять dpi-масштабирование к приложению?


Изменить: Что такое масштабирование с высоким разрешением?

Не все пользователи используют Windows со скоростью 96 точек на дюйм. Предполагается, что не каждая кнопка имеет размер 75x23 пикселя, не каждая панель инструментов имеет высоту 25 пикселей, и не каждый глиф в виде дерева имеет размер 16x16. Если пользователь выбрал другую настройку dpi для Windows, вам нужно все масштабировать соответствующим образом.

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

Начиная с Windows Vista и используя возможности Desktop Composition, Microsoft разочаровалась в том, что разработчики выполняют свою работу, а теперь лгут приложениям. Они сообщают приложениям, что пользователь работает с разрешением 96 точек на дюйм. Затем Windows использует видеокарту и Композицию рабочего стола для масштабирования форм.

Pro: содержание формы будет иметь хороший читаемый размер.
Против: все будет немного нечетко.

Эта функция масштабирования с высоким разрешением работает только по усмотрению пользователя и требует:

  • Windows Vista или новее
  • Композиция рабочего стола должна быть включена
  • пользователю отключить «Использовать масштабирование в стиле Windows XP»
  • пользователь не должен отключать масштабирование для вашего приложения

Как разработчик, вы можете отказаться от масштабирования с высоким разрешением; если вы приложили все усилия, чтобы написать свое приложение правильно, и вы знаете, что вы будете правильно работать с высоким разрешением. Вы отказываетесь от этого масштабирования, добавляя запись манифеста в свой исполняемый файл, заявляя, что вы « осведомлены о высоком разрешении ».

Вопрос о том, как заставить ваше приложение уважать предпочтения пользователя (включая шрифт, размер шрифта и настройку dpi), является вопросом для stack overflow. Как и синтаксис для записи манифеста, декларирующей ваше « осведомленность с высоким разрешением »

Этот вопрос для суперпользователя заключается в том, как игнорировать разработчика, который пошел дальше и добавил запись манифеста с высоким разрешением, когда на самом деле приложение не поддерживает высокое разрешение. Они сказали Windows отключить масштабирование, но на самом деле они не тестировали приложение. Существует программное обеспечение с записью манифеста с «высоким разрешением на дюйм», и теперь приложение не может использоваться под «большими шрифтами» (например, 120 точек на дюйм).


Я тоже заинтересован в этом. У нас есть критически важное приложение, которое не поддерживает dpi и изначально было разработано для экрана 800x600. Windows не масштабирует его по умолчанию, и не имеет значения, используем ли мы XP, Vista или 7. Поскольку наши сотрудники проводят большую часть своего времени в этом приложении 800x600, они настаивают на использовании своих 20-дюймовых ЖК-мониторов. в разрешении 800x600! Это огромная трата, и навязанное им отсутствие пикселей мешает им, когда им нужно использовать MS Office, IE8 и т. д.
— Майлз Эриксон,

1
Только в Windows Vista Microsoft начала использовать Desktop Composition (то, что некоторые ошибочно называют Aero ), чтобы использовать графическую карту для масштабирования приложений, которые специально не отказываются от масштабирования. В XP не было никакого масштабирования, и вы не хотите масштабировать в Vista 7. Вы хотите, чтобы ваше приложение было написано правильно. Подойдите к машине разработчика, измените их разрешение на 1050 и установите dpi на 168. Все будет таким же большим, увеличенным в режиме tard, за исключением того, что приложение не будет работать должным образом. Скажите им, что они не получают ни еды, ни воды, пока не починят.
— Ян Бойд

У нас не всегда есть доступ к разработчикам, которые создают приложения, которые мы используем. Если только мы сделали ...
— Цилиндрический

Формы = формы?
— jiggunjer

Ответы:


5

Хм. Мое предложение будет изменить манифест и удалить неправильное объявление. И не забудьте сообщить об этом разработчику, как только сможете!

Изменить: Обратите внимание, что должна быть возможность просто поместить манифест рядом с исполняемым файлом, например, для foo.exe, вы бы поместили манифест в foo.exe.manifest. См. Статью MSDN ( см. Раздел «Синтаксис имени файла»).


Я предполагаю, что это единственный путь. С другой стороны: это делает недействительной цифровую подпись приложения.
— Ян Бойд

@Ian: похоже, вам не нужно помещать манифест в ресурс.
— SamB

3
Раньше .manifestфайл имел приоритет над манифестом внутри исполняемого файла. Сегодня любой манифест, встроенный в исполняемый файл, переопределяет любой внешний .manifestфайл. я не помню, какой пакет обновления XP изменил его - я думаю, что это был SP2.
— Ян Бойд

8

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

DPIMangler: пост в блоге , исходный код .


6

Вы по-прежнему можете редактировать манифест, вам просто нужно отредактировать его в самом файле .EXE. Ищите редактор ресурсов, который имеет явную поддержку. Примером элементарной поддержки является редактор ресурсов XN.) Просто найдите и удалите строку, в которой упоминается HIGHDPIAWARE, и сохраните исполняемый файл.

Обязательно сделайте копию исполняемого файла, прежде чем редактировать его!


«С другой стороны: это делает недействительной цифровую подпись приложения».
— Ян Бойд

0

Интересно, если вы ищете ResizeEnable?

http://www.digitallis.co.uk/pc/ResizeEnable/


Нет, окна уже можно изменять. Проблема в том, когда композитор создает окно для отображения. Прямо сейчас это не делает ничего особенного, поскольку приложение заявило, что это не должно быть масштабировано. Но на самом деле окно действительно нужно масштабировать.
— Ян Бойд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.