Поделиться через


Правильное отображение на дисплее с высоким разрешением

Хотя Direct2D решает многие проблемы с высоким разрешением, необходимо выполнить два шага, чтобы убедиться, что приложение правильно работает на дисплеях с высоким разрешением.

Шаг 1. Использование собственного DPI окна после его создания

Функция GetDpiForWindow извлекает значение точек на дюйм (точек на дюйм) для указанного окна. Чтобы использовать это значение для задания ширины окна, используйте следующую формулу:

<DPI> * <ширина, в пикселях> / <разрешение по умолчанию>

... где DPI — это значение, извлеченное командой GetDpiForWindow, а значение по умолчанию — 96 (определяется как USER_DEFAULT_SCREEN_DPI в заголовке winuser.h ). Формула для вертикальной оси аналогична:

<DPI> * <высота, в пикселях> / <по умолчанию по вертикали точек на дюйм>

В примере кода, приведенном на шаге 2.3 раздела Создание простого приложения Direct2D , извлекается значение DPI окна, а затем устанавливается его размер 640 × 480 с масштабированием до DPI.

Примечание

Для приложения универсальная платформа Windows (UWP) можно использовать свойство DisplayInformation::LogicalDpi.

Шаг 2. Объявление приложения с поддержкой DPI

Когда приложение объявляет себя с поддержкой DPI, это оператор, указывающий, что приложение хорошо работает при параметрах DPI до 200 DPI. В Windows Vista и Windows 7 при включенной виртуализации DPI приложения, не поддерживающие DPI, масштабируются, а приложения получают виртуализированные данные из системных API, таких как функция GetSystemMetric . Чтобы объявить, что приложение учитывает DPI, выполните следующие действия.

  1. Создайте файл с именем DeclareDPIAware.manifest.

  2. Скопируйте следующий xml-код в файл и сохраните его:

    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
      <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
          <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
      </asmv3:application>
    </assembly>
    
  3. В VCPROJ-файле проекта добавьте следующую запись в каждый элемент Configuration в разделе VisualStudioProject/Configurations:

    <Tool
        Name="VCManifestTool"
        AdditionalManifestFiles="DeclareDPIAware.manifest"
    />