Метод 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 GUID класса DisplayInformation.
displayInfo
Тип: [iid_is][retval][out] void**
Указатель на блок памяти, который получает указатель на возвращенный объект DisplayInformation.
Возвращаемое значение
Тип: HRESULT
Если функция успешно выполнена, она возвращает S_OK. В противном случае возвращается кодошибки
Замечания
Таким образом, DisplayInformation может обрабатывать движения окон и сообщения об изменениях DPI, он перехватывает цикл сообщений HWND. Чтобы убедиться, что это происходит гладко, GetForWindow имеет следующие требования:
- Аргументом окна
должно быть HWND окна верхнего уровня, принадлежащее текущему потоку. - Текущий поток должен иметь windows.System.DispatcherQueue запущен для получения событий.
- Текущий поток может быть MTA или STA.
Вы несете ответственность за кэширование созданного
Примеры
Очень важно для приложения, которое отрисовывает широкоцветные гаммы и содержимое с высоким динамическим диапазоном для динамического изменения условий монитора; или при перемещении между мониторами. На ноутбуке пользователь может настроить яркость экрана и настроить параметры сопоставления тонов, предоставляемые приложениями.
// 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 |