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 |