API-интерфейсы и параметры реестра, связанные с DPI

Если необходимо выполнить настройку развертывания, в следующих разделах описываются разделы реестра и системные параметры, к которым могут потребоваться скрипты после установки.

В этой статье:

Собственное разрешение основного дисплея

Таблица 1 Windows 8.1 Уровни масштабирования, хотя и не является исчерпывающей, содержит сведения о Windows 8.1 уровне масштабирования для ряда распространенных дисплеев. Разрешение панели указывает физическую плотность пикселей панели, а уровень масштабирования — коэффициент масштабирования , который будет использоваться для этого отображения.

Таблица 1 Windows 8.1 уровни масштабирования

Размер дисплея Разрешение дисплея Горизонтальный (пиксели) Вертикальная (пиксели) Разрешение на дюйм панели Уровень масштабирования
10.6" FHD 1920 1080 208 150%
10.6" HD 1366 768 148 100 %
11.6" WUXGA 1920 1200 195 150%
11.6" HD 1366 768 135 100 %
13.3" WUXGA 1920 1200 170 150%
13.3" QHD 2560 1440 221 200 %
13.3" HD 1366 768 118 100 %
15.4" FHD 1920 1080 143 125%
15.6" QHD+ 3200 1800 235 200 %
17" FHD 1920 1080 130 125%
23" QFHD (4 КБ) 3840 2160 192 200 %
24" QHD 2560 1440 122 125%

Чтобы программно найти эти сведения для любого устройства, можно написать служебную программу, которая возвращает данные. Собственное основное разрешение извлекается путем вызова функции API GetDeviceCaps() с использованием hdc для рабочего стола и индексов HORZRES и VERTRES:

// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalResolution = GetDeviceCaps(desktopDc,HORZRES);
verticalResolution = GetDeviceCaps(desktopDc,VERTRES);

Дополнительные сведения о функции GetDC см. в разделе Функция GetDC().

Коэффициент масштабирования основного отображения DPI

Аналогичным образом можно получить плотность пикселей с помощью индексов LOGPIXELSX и LOGPIXELSY:

// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX);
verticalDPI = GetDeviceCaps(desktopDc,LOGPIXELSY);

Эти результаты возвращаются в системе координат, в которой 96 соответствует 100 %, как показано в таблице 2 DPI Коэффициенты масштабирования.

Коэффициенты масштабирования в таблице 2 DPI

DPI Масштаб
96 100
120 125
144 150
192 200

Примечание

Этот API будет возвращать различные результаты в зависимости от режима осведомленности о DPI вашего приложения. Настройка режима осведомленности требует добавления XML в манифест приложения, как описано ниже.

Режим осведомленности о DPI Параметр манифеста Возвращаемое значение
Нет Нет  96 для всех дисплеев независимо от коэффициента масштабирования
Системное разрешение с учетом DPI <dpiAware>True</dpiAware> DPI основного дисплея на момент запуска сеанса Windows (когда пользователь впервые вошел в Windows)
Per-Monitor DPI <dpiAware>True/PM</dpiAware> DPI основного дисплея на момент запуска сеанса Windows (когда пользователь впервые вошел в Windows). Чтобы получить DPI дисплея, на котором находится приложение, используйте GetWindowDpi() или GetDpiForMonitor()

Дополнительные сведения об этом параметре манифеста см. в разделе Функция SetProcessDPIAware.

Режим масштабирования

Пользовательский интерфейс панель управления\ Внешний вид и персонализация\Пользовательский интерфейс отображения включает флажок: Позвольте мне выбрать один уровень масштабирования для всех моих дисплеев, который определяет, применяет ли система один коэффициент масштабирования ко всем дисплеям (как в Windows 8 и более ранних версиях Windows) или различные коэффициенты масштабирования, которые учитывают плотность пикселей каждого дисплея ( Windows 8.1 по умолчанию). Этот флажок настраивает раздел реестра HKCU\панель управления\Desktop\Win8DpiScaling в Windows 8.1.

Таблица 3 HKCU\панель управления\Desktop\Win8DpiScaling Values

Значение ключа Значение
0 Различные коэффициенты масштабирования для каждого дисплея: Windows 8.1 по умолчанию. Содержимое, перемещаемое с одного дисплея на другой, будет иметь правильный размер, но его можно масштабировать с помощью растрового рисунка.
1 Один и тот же коэффициент масштабирования применяется ко всем дисплеям: Windows 8 и более ранних версий Windows. Содержимое, перемещаемое с одного дисплея на другой, может иметь неправильный размер.

Переопределение масштабирования в режиме масштабирования Windows 8.1

Если флажок Разрешить выбрать один уровень масштабирования для всех моих дисплеев снят и система работает в режиме масштабирования Windows 8.1, пользователю предоставляется ползунок, который позволяет переопределить текущие коэффициенты масштабирования, от меньшего, среднего до большего. Этот параметр настраивается в разделе реестра HKCU\панель управления\Desktop\DesktopDPIOverride.

Таблица 4 HKCU\панель управления\Desktop\DesktopDPIOverride Values

Значение ключа Значение
<0 Уменьшите каждый коэффициент масштабирования отображения по умолчанию на это значение (например, если по умолчанию было масштабирование на 150 %, -1 соответствует 125 %, от –2 до 100 %).
0 Используйте значение по умолчанию для каждого дисплея.
0> Увеличьте каждый коэффициент отображения на это значение (в предыдущем примере +1 соответствует 200 % масштабированию).

Все коэффициенты масштабирования отображения в этом режиме ограничены одним из следующих четырех значений: 100 %, 125 %, 150 %, 200 %. Кроме того, после применения масштабирования приложения должны иметь не менее 720 эффективных строк разрешения (т. е. физическое вертикальное разрешение дисплея, разделенное на коэффициент масштабирования); это может дополнительно ограничить диапазон допустимых коэффициентов масштабирования отображения. В таблице 5 Отображаемые значения показано, какие значения разрешены для дисплеев разного размера:

Отображаемые значения таблицы 5

Вертикальные линии Поддерживаемые коэффициенты масштабирования
<900 100 %
>= 900 и <1080 100%, 125%
>=1080 и <1440 100%, 125%, 150%
>=1440 100%, 125%, 150%, 200%

Коэффициент масштабирования на уровне системы в режиме масштабирования Windows 8

Если установлен флажок Разрешить выбрать один уровень масштабирования для всех моих дисплеев , пользователь может указать коэффициент масштабирования, который применяется ко всем дисплеям независимо от плотности пикселей каждого дисплея. Используя настраиваемый параметр, пользователь может выбрать значения, отличные от 100%, 125%, 150%, 200%, хотя они ограничены диапазоном (100%-500%). Этот параметр настраивается в разделе реестра HKCU\панель управления\Desktop\LogPixels.

Таблица 6 HKCU\панель управления\Desktop\LogPixels Values

Значение ключа Значение
96 100 % масштабирование на каждом дисплее
120 Масштабирование на 125 % на каждом дисплее
144 Масштабирование на 150 % на каждом дисплее
192 200 % масштабирование на каждом дисплее
<other> <другое> масштабирование 96/100 на каждом дисплее

Документация по разработке приложений с высоким разрешением

Поддержка высокого разрешения для ИТ-специалистов