Расширенное масштабирование системы 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 на всех мониторах.
- Создать новый файл
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>
- В настройках проекта в Инструменте манифеста установите Дополнительные файлы манифеста на
GdiScaling.manifest
, Это объединит ваши настройки масштабирования GDI с остальной частью сгенерированного манифеста.
При сборке вы получите предупреждение о том, что Microsoft не будет действовать вместе, но вы уже знали это.:-) Точный текст предупреждения таков:
GdiScaling.manifest: предупреждение создания манифеста 81010002: нераспознанный элемент "gdiScaling" в пространстве имен " http://schemas.microsoft.com/SMI/2017/WindowsSettings".
К счастью, Windows все равно и распознает настройки в любом случае.