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 точек на дюйм).

4 ответа4

8

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

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

6

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

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

5

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

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .