Метод IDisplayInformationStaticsInterop::GetForWindow (windows.graphics.display.interop.h)

Извлекает объект DisplayInformation для указанного окна. GetForWindow всегда выделяет и возвращает новый объект DisplayInformation.

Синтаксис

HRESULT GetForWindow(
  HWND   window,
  REFIID riid,
  void   **displayInfo
);

Параметры

window

Тип: [in] HWND

Дескриптор окна.

riid

Тип: [in] REFIID

GUID класса DisplayInformation.

displayInfo

Тип: [iid_is][retval][out] void**

Указатель на блок памяти, получающий указатель на возвращенный объект DisplayInformation .

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

Тип: HRESULT

Если функция завершается успешно, она возвращает S_OK. В противном случае возвращается код ошибкиHRESULT.

Комментарии

Чтобы DisplayInformation обрабатывала движения окна и сообщения об изменении DPI, она перехватывали цикл сообщений HWND. Чтобы обеспечить беспроблемное выполнение, GetForWindow предъявляет следующие требования:

  • Аргументом окна должно быть HWND окна верхнего уровня, которое принадлежит текущему потоку.
  • Для получения событий в текущем потоке должен быть запущен windows.System.DispatcherQueue .
  • Текущий поток может быть MTA или STA.

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

Примеры

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

// It's safe, and recommended, to cache the DisplayInformation created from an HWND,
// since it safely provides the latest information and event handlers for when
// changes take place.

#include <Windows.Graphics.Display.Interop.h>
#include <winrt/Windows.Graphics.Display.h>
using namespace winrt::Windows::Graphics::Display;
...
void ReadHdrParametersFromDisplayInformation(HWND myWindow)
{
    auto factory{ winrt::get_activation_factory<DisplayInformation,
        IDisplayInformationStaticsInterop>() };

    DisplayInformation displayInfo{ nullptr };

    winrt::check_hresult(
        factory->GetForWindow(
            myWindow,
            winrt::guid_of<DisplayInformation>(),
            winrt::put_abi(displayInfo)
        )
    );

    auto colorInfo{ displayInfo.GetAdvancedColorInfo() };
    // Here you can read colorInfo properties such as:
    // * CurrentAdvancedColorKind
    // * RedPrimary, BluePrimary, GreenPrimary, WhitePoint
    // * MinLuminanceInNits, MaxLuminanceInNits
    // * MaxAverageFullFrameLuminanceInNits, SdrWhiteLevelInNits
    // ... and adapt your rendering.

    // You can also subscribe event handlers to listen for changes:
    displayInfo.AdvancedColorInfoChanged(
        [&](auto sender, auto args)
        {
            // Handle the event.
        }
    );

    // Cache the DisplayInformation object for as long as your window
    // is alive: it always provides fresh data for your window.
}

Требования

   
Минимальная версия клиента сборка Windows 11 22621
Верхняя часть windows.graphics.display.interop.h