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


Функция EnableNonClientDpiScaling (winuser.h)

На дисплеях с высоким разрешением включает автоматическое масштабирование неклиентской области указанного окна верхнего уровня. Должен вызываться во время инициализации этого окна.

Примечание Приложения, работающие на DPI_AWARENESS_CONTEXTDPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 автоматически масштабировать свои области, не являющиеся клиентскими, по умолчанию. Им не нужно вызывать эту функцию.

 

Синтаксис

BOOL EnableNonClientDpiScaling(
  [in] HWND hwnd
);

Параметры

[in] hwnd

Окно, в которое должно быть включено автоматическое масштабирование.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение. Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Вызов этой функции включает масштабирование, не являющееся клиентом, для отдельного окна верхнего уровня с DPI_AWARENESS_CONTEXTDPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE. Если вместо этого вы не используете функцию информирования по каждому окну и весь процесс выполняется в режиме DPI_AWARENESS_PER_MONITOR_AWARE , вызов этой функции позволит выполнять масштабирование, не являющееся клиентом, в окнах верхнего уровня процесса.

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

Не клиентское масштабирование для окон верхнего уровня не включено по умолчанию. Необходимо вызвать этот API, чтобы включить его для каждого отдельного окна верхнего уровня, для которого требуется автоматически масштабировать область, не являющуюся клиентской. После этого отключить его невозможно. Включение масштабирования, не являющегося клиентом, означает, что все области, отрисованные системой для окна, будут автоматически масштабироваться в ответ на изменения DPI в окне. Сюда входят такие области, как подпись строка, полосы прокрутки и строка меню. Вы хотите вызвать EnableNonClientDpiScaling , если требуется, чтобы операционная система отвечала за автоматическую отрисовку этих областей с правильным размером в зависимости от DPI монитора.

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

Эта функция должна вызываться из WM_NCCREATE во время инициализации нового окна. Пример вызова может выглядеть следующим образом:

case WM_NCCREATE:
{
    EnableNonClientDpiScaling(hwnd);
    return (DefWindowProc(hwnd, message, wParam, lParam));
}

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 1607 [только классические приложения]
Минимальная версия сервера Windows Server 2016 [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll