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


Масштабирование образа рабочего стола

Этот раздел относится только к Windows 7 и более поздним версиям, а также Windows Server 2008 R2 и более поздним версиям операционной системы Windows.

Принцип работы масштабирования

Вызывающий объект может использовать функцию SetDisplayConfig Connecting and Configuring Display (CCD) для масштабирования изображения рабочего стола до монитора:

  • Если рабочий стол и монитор используют одинаковое разрешение, setDisplayConfig не требуется для масштабирования образа рабочего стола до монитора. Эта операция SetDisplayConfig называется масштабированием удостоверений.

  • Если разрешение рабочего стола и монитора отличается, SetDisplayConfig применяет один из следующих типов масштабирования. Разрешение монитора определяется структурой DISPLAYCONFIG_TARGET_MODE .

    • Масштабирование по центру

      Масштабирование по центру — это режим, в котором рабочий стол отображается на мониторе без какого-либо масштабирования. Когда SetDisplayConfig применяет масштабирование по центру, черные полосы могут быть видны над рабочим столом и под ним. На следующем рисунке показано масштабирование по центру.

      Схема масштабирования по центру с черными полосами над и под рабочим столом.

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

      Растянутое масштабирование — это режим, в котором рабочий стол вытягивается по горизонтали и вертикали на мониторе, чтобы обеспечить использование всего дисплея. Когда SetDisplayConfig применяет растянутое масштабирование, над рабочим столом и под ним не отображаются черные полосы. Однако рабочий стол может показаться искаженным. На следующем рисунке показано растянутое масштабирование.

      Схема растянутого масштабирования с заполнением рабочего стола всем дисплеем.

    • Сохранение пропорций с растянутой

      Растянутое масштабирование с сохранением пропорций — это режим, в котором рабочий стол максимально растягивается по горизонтали и вертикали с сохранением пропорций. Когда SetDisplayConfig применяет растянутое масштабирование с сохранением пропорций, черные полосы могут быть видны как над, так и снизу , а также слева и справа от рабочего стола. Однако черные полосы не могут быть видны как над, так и снизу , а также слева и справа от рабочего стола. Так как пользователи, как ожидается, предпочитают этот тип масштабирования, SetDisplayConfig применяет этот тип масштабирования по умолчанию. На следующем рисунке показано растянутое масштабирование с сохранением пропорций.

      Схема, показывающая растянутое масштабирование с сохранением пропорций с черными полосами по обе стороны или выше и под рабочим столом.

Масштабирование зависит от исходного и целевого режимов, используемых для пути. Кроме того, вызывающий объект может вызывать SetDisplayConfig без указания сведений о целевом режиме (то есть установка параметра modeInfoArray является необязательным и может иметь значение NULL). Это означает, что вызывающий объект обычно не может предсказать, должен ли SetDisplayConfig выполнять какое-либо масштабирование. Кроме того, не существует API для получения полного списка типов масштабирования, поддерживаемых графическим адаптером. Функция Win32 EnumDisplaySettings возвращает DMDFO_DEFAULT в члене dmDisplayFixedOutput структуры DEVMODE , на которую указывает параметр lpDevMode , когда вызывающий объект запрашивает типы масштабирования Windows 7.

Масштабирование, которое вызывающий объект передает в SetDisplayConfig , является намерением масштабирования, а не явным запросом для выполнения операции масштабирования. Если требуется масштабирование (например, исходное и целевое разрешения различаются), SetDisplayConfig использует масштабирование, которое предоставляет вызывающий объект. Если предоставленное масштабирование не поддерживается, SetDisplayConfig использует масштабирование по умолчанию графического адаптера. Если исходное и целевое разрешения, которые вызывающий объект передает в SetDisplayConfig , совпадают, SetDisplayConfig всегда устанавливает масштабирование удостоверений.

Запросы на масштабирование

В следующей таблице показаны различные запросы на масштабирование SetDisplayConfig и указана сокращенная номенклатура, используемая в таблицах, приведенных в подразделах ниже. Определения значений DISPLAYCONFIG_SCALING_XXX см. в DISPLAYCONFIG_SCALING.

Запрос на масштабирование Сокращенная номенклатура, используемая в таблицах ниже
DISPLAYCONFIG_SCALING_IDENTITY DC_IDENTITY
DISPLAYCONFIG_SCALING_CENTERED DC_CENTERED
DISPLAYCONFIG_SCALING_STRETCHED DC_STRETCHED
DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX DC_ASPECTRATIOCENTEREDMAX
DISPLAYCONFIG_SCALING_CUSTOM DC_CUSTOM
DISPLAYCONFIG_SCALING_PREFERRED DC_PREFERRED
Значение масштабирования адаптера по умолчанию. В настоящее время в планшетных системах значение по умолчанию растягивается. В системах без планшетов с графическими адаптерами, поддерживающими модель драйвера дисплея Windows (WDDM), значение по умолчанию определяется драйвером. В системах без планшетов с графическими адаптерами, поддерживающими WDDM с новыми функциями для Windows 7, по умолчанию используется DC_ASPECTRATIOCENTEREDMAX. AdapterDefault
Значение масштабирования из базы данных для текущих подключенных мониторов DatabaseValue

Запросы на масштабирование SetDisplayConfig

В следующей таблице показаны значения, сохраненные в базе данных, и фактически заданные значения, где:

  • "Set (same)" и "Store (same)" — это значения набора и хранения, если результирующий исходный и целевой режимы имеют одинаковое разрешение.
  • "Set (different)" и "Store (different)" — это значения набора и хранения, если результирующий исходный и целевой режимы имеют разные разрешения.
Флаг масштабирования, передаваемый в SetDisplayConfig Задать (то же самое) Магазин (то же самое) Задать (другое) Задать (другое)
DC_IDENTITY текущей конфигурации не в базе данных DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_IDENTITY текущей конфигурации в базе данных DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue
DC_CENTERED DC_IDENTITY DC_CENTERED DC_CENTERED DC_CENTERED
DC_STRETCHED DC_IDENTITY DC_STRETCHED DC_STRETCHED DC_STRETCHED
DC_ASPECTRATIOCENTEREDMAX в WDDM с драйвером функций Windows 7 DC_IDENTITY DC_ASPRATIOMAX DC_ASPRATIOMAX DC_ASPRATIOMAX
DC_ASPECTRATIOCENTEREDMAX в драйвере WDDM DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_CUSTOM в WDDM с драйвером функций Windows 7, поддерживающим пользовательское масштабирование по пути DC_CUSTOM DC_CUSTOM DC_CUSTOM DC_CUSTOM
DC_CUSTOM в WDDM с драйвером функций Windows 7, который не поддерживает пользовательское масштабирование по пути DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_CUSTOM в драйвере WDDM DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_PREFERRED текущей конфигурации нет в базе данных DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_PREFERRED текущей конфигурации в базе данных DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue

Устаревшие запросы на масштабирование ChangeDisplaySettingsEx

В следующей таблице показано, как масштабирование, которое вызывающий объект может передать в устаревший API ChangeDisplaySettingsEx , сопоставляется с масштабируемым набором, где:

  • "Set (same)" и "Store (same)" — это значения набора и хранения, если результирующий исходный и целевой режимы имеют одинаковое разрешение.
  • "Set (different)" и "Store (different)" — это значения набора и хранения, если результирующий исходный и целевой режимы имеют разные разрешения.
Флаг масштабирования, переданный в ChangeDisplaySettingsEx Задать (то же самое) Магазин (то же самое) Задать (другое) Задать (другое)
DMDFO_DEFAULT с текущей конфигурацией, не в базе данных CCD DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DMDFO_DEFAULT с текущей конфигурацией в базе данных CCD DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue
DMDFO_STRETCH DC_IDENTITY DC_STRETCHED DC_STRETCHED DC_STRETCHED
DMDFO_CENTER DC_IDENTITY DC_CENTERED DC_CENTERED DC_CENTERED
DM_DISPLAYFIXEDOUTPUT не задано, текущая конфигурация не находится в базе данных CCD DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DM_DISPLAYFIXEDOUTPUT не задана текущая конфигурация в базе данных CCD DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue

Устаревший перевод масштабирования EnumDisplaySettings

В следующей таблице показано, как преобразуется масштабирование конфигурации дисплея и возвращается из EnumDisplaySettings.

Текущее активное масштабирование Значения масштабирования GDI, возвращаемые из устаревшей версии EnumDisplaySettings(ENUM_CURRENT_SETTINGS)
DC_IDENTITY DMDFO_DEFAULT
DC_CENTERED DMDFO_CENTER
DC_STRETCHED DMDFO_STRETCH
DC_ASPRATIOMAX DMDFO_DEFAULT
DC_CUSTOM DMDFO_DEFAULT
DC_PREFERRED DMDFO_DEFAULT

Игры с DirectX и масштабирование

Среда выполнения Microsoft DirectX 9L и более ранних версий требует, чтобы приложения всегда вызывали функцию ChangeDisplaySettingsEx без DM_DISPLAYFIXEDOUTPUT, заданной в элементе dmFields структуры DEVMODE, на которую указывает параметр lpDevMode . Среды выполнения DirectX 10 и более поздних версий позволяют приложениям выбирать масштабирование, которое эти приложения передают в ChangeDisplaySettingsEx. В следующей таблице показано сопоставление значений масштабирования с флагами масштабирования, передаваемыми в ChangeDisplaySettingsEx.

Значение масштабирования цепочки переворачивания DXGI Флаги масштабирования, передаваемые в ChangeDisplaySettingsEx
DXGI_MODE_SCALING_UNSPECIFIED DMDFO_DEFAULT, DMDFO_CENTER или DMDFO_STRETCH. Масштабирование, используемое приложениями, зависит от нескольких факторов, включая текущее масштабирование рабочего стола и список режимов, предоставляемый драйвером.
DXGI_MODE_SCALING_CENTERED DMDFO_CENTER
DXGI_MODE_SCALING_STRETCHED DMDFO_STRETCH

Используя эти сведения в сочетании с предыдущими таблицами масштабирования, можно определить ожидаемое масштабирование из приложения DirectX.