IDisplayInformationStaticsInterop::GetForWindow メソッド (windows.graphics.display.interop.h)

指定したウィンドウの DisplayInformation オブジェクトを取得します。 GetForWindow は、常に新しい DisplayInformationを割り当てて返します。

構文

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

パラメーター

window

型: [入力] 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 インスタンスを破棄するために、最後の参照を削除します。

広色域と高ダイナミック レンジコンテンツをレンダリングするアプリは、モニターの変化する条件に合わせて動的に調整することが重要です。またはモニター間を移動する場合。 ノート PC では、ユーザーは画面の明るさを調整し、アプリに提供されるトーン マッピング パラメーターを調整できます。

// 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