Freigeben über


IDisplayInformationStaticsInterop::GetForWindow-Methode (windows.graphics.display.interop.h)

Ruft ein DisplayInformation -Objekt für das angegebene Fenster ab. GetForWindow weist immer eine neue DisplayInformation-zu und gibt diese zurück.

Syntax

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

Parameter

window

Typ: [in] HWND-

Der Ziehpunkt des Fensters.

riid

Typ: [in] REFIID-

Die GUID- der klasse DisplayInformation.

displayInfo

Typ: [iid_is][retval][out] void**

Ein Zeiger auf einen Speicherblock, der einen Zeiger auf das zurückgegebene DisplayInformation-Objekt empfängt.

Rückgabewert

Typ: HRESULT-

Wenn die Funktion erfolgreich ist, wird S_OKzurückgegeben. Andernfalls wird ein HRESULT-Fehlercodezurückgegeben.

Bemerkungen

Damit DisplayInformation- Fensterbewegungen und DPI-Änderungsmeldungen verarbeiten kann, wird die Nachrichtenschleife Ihrer HWND-eingebunden. Um sicherzustellen, dass dies reibungslos geschieht, weist GetForWindow die folgenden Anforderungen auf:

  • Das Argument Fenster- muss die HWND- eines Fensters der obersten Ebene sein, das dem aktuellen Thread gehört.
  • Der aktuelle Thread muss eine Windows.System.DispatcherQueue ausgeführt werden, um Ereignisse zu empfangen.
  • Der aktuelle Thread kann MTA oder STA sein.

Sie sind dafür verantwortlich: Zwischenspeichern der erstellten DisplayInformation-, solange das Argument Fenster relevant ist; Deregistrierung von Ereignishandlern; und löschen Sie den letzten Verweis, um die DisplayInformation Instanz zu zerstören.

Beispiele

Es ist wichtig für eine App, die breite Farbskala und Inhalte mit hohem dynamischen Bereich rendert, um sich dynamisch an die Sich ändernden Bedingungen des Monitors anzupassen. oder beim Wechseln zwischen Monitoren. Auf einem Laptop passt der Benutzer möglicherweise die Helligkeit des Bildschirms an und kann die für Apps bereitgestellten Tonzuordnungsparameter anpassen.

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 11 Build 22621
Header- windows.graphics.display.interop.h