Как использовать мой собственный файл манифеста и встроить его в исполняемый файл с помощью Visual Studio 2017? - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь использовать поддержку PerMonitorV2 DPI, которая изменяет размер не клиентской области при изменении DPI. В документации MSDN рекомендуется использовать манифест для установки режима осведомленности о DPI: Установка значения DPI по умолчанию для процесса .

В разделе «Инструмент манифеста» свойств конфигурации VS доступны только три параметра для DPI DPI Awareness: Нет (не известно), Hight DPI Aware и для каждого монитора DPI Aware (который, кажется, PerMonitorV1), поэтому мне нужно найти способ переопределить эти настройки DPI, но я не знаю, как это сделать. (Мое лучшее предположение заключается в том, чтобы как-то предоставить свой собственный файл манифеста, а не полагаться на Visual Studio для его создания.)

1 Ответ

0 голосов
/ 18 сентября 2018

В настройках инструмента манифеста вы можете определить дополнительный фрагмент манифеста, который Visual Studio объединит со стандартным.Манифест по умолчанию по-прежнему будет содержать тег <dpiAware>, который будет использоваться в качестве запасного варианта для более старых версий ОС, которые не понимают тег <dpiAwareness>.

Шаги:

  1. Откройте конфигурацию проекта, выберите «Инструмент манифеста»> «Ввод и вывод».
  2. В поле «Дополнительные файлы манифеста» введите имя нужного фрагмента манифеста.включать.Путь относительно вашей папки проекта.

    Фрагмент выглядит следующим образом.Обратите внимание, что я удалил тег <dpiAware> из образца MSDN :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
          <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
        </windowsSettings>
      </application>
    </assembly>
    
  3. Из списка "DPI Awareness" выберите "Высокое DPI Aware ".Как написано выше, это запасное значение для более старых версий Windows.

Результат:

Это объединенный манифест для проекта Win32 Iсоздан с помощью мастера приложений.Он встроен в ресурсы приложения.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
    </windowsSettings>
  </application>
</assembly>

Если вы получили два тега <dpiAware>, вы забыли удалить <dpiAware> из фрагмента манифеста.

...