Метод 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 |
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по