Расширенное масштабирование системы DPI с VS2017

У меня есть приложение MFC, которое имеет поддержку MFC DPI по умолчанию: оно поддерживает высокий DPI, но не поддерживает DPI для каждого монитора. В Windows 10 версии 1703 добавлена ​​поддержка системного (улучшенного) масштабирования DPI. Я включил этот режим из проводника Windows в настройках совместимости.exe, и он работает для моего приложения.

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

Позволяет ли это манифест приложения, и если да, что нужно добавить или изменить?

Кроме того, как мне изменить манифест? В настоящее время я использую стандартную структуру проекта Visual Studio 2017 MFC, в которой нет файла манифеста в моем проекте. Вместо этого содержимое манифеста указывается в качестве свойств проекта, а манифест создается с помощью mt.exe. Могу ли я внести изменения с помощью mt.exe? Если мне нужно заменить манифест на другой, какой самый простой способ?

1 ответ

Решение

Добавьте параметр gdiScaling в манифест приложения, чтобы сообщить Windows, что нужно применять масштабирование GDI на всех мониторах.

  1. Создать новый файл GdiScaling.manifest в вашем проекте.
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"  xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">
      <gdiScaling>true</gdiScaling>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>
  1. В настройках проекта в Инструменте манифеста установите Дополнительные файлы манифеста на GdiScaling.manifest, Это объединит ваши настройки масштабирования GDI с остальной частью сгенерированного манифеста.

При сборке вы получите предупреждение о том, что Microsoft не будет действовать вместе, но вы уже знали это.:-) Точный текст предупреждения таков:

GdiScaling.manifest: предупреждение создания манифеста 81010002: нераспознанный элемент "gdiScaling" в пространстве имен " http://schemas.microsoft.com/SMI/2017/WindowsSettings".

К счастью, Windows все равно и распознает настройки в любом случае.

Другие вопросы по тегам