IDisplayInformationStaticsInterop::GetForWindow 方法(windows.graphics.display.interop.h)
检索指定窗口的 DisplayInformation 对象。 GetForWindow 始终分配并返回新的 DisplayInformation。
语法
HRESULT GetForWindow(
HWND window,
REFIID riid,
void **displayInfo
);
参数
window
类型:[in] HWND
窗口的句柄。
riid
类型:[in] REFIID
DisplayInformation 类的 GUID。
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 |