Condividi tramite


Metodo IDisplayInformationStaticsInterop::GetForWindow (windows.graphics.display.interop.h)

Recupera un oggetto DisplayInformation per la finestra specificata. GetForWindow sempre alloca e restituisce un nuovo DisplayInformation.

Sintassi

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

Parametri

window

Tipo: [in] HWND

Handle della finestra.

riid

Tipo: [in] REFIID

GUID della classe DisplayInformation .

displayInfo

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

Puntatore a un blocco di memoria che riceve un puntatore all'oggetto DisplayInformation restituito.

Valore restituito

Tipo: HRESULT

Se la funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT.

Osservazioni

In modo che DisplayInformation possa elaborare i movimenti delle finestre e i messaggi di modifica DPI, associa il ciclo di messaggi del HWND. Per garantire che ciò avvenga senza problemi, GetForWindow ha i requisiti seguenti:

  • L'argomento della finestra di deve essere il HWND di una finestra di primo livello di proprietà del thread corrente.
  • Per ricevere eventi, il thread corrente deve avere un Windows.System.DispatcherQueue in esecuzione.
  • Il thread corrente può essere MTA o STA.

Sei responsabile della memorizzazione nella cache del DisplayInformation creato , purché l'argomento della finestra di sia rilevante; deregistrazione dei gestori eventi; e rilasciando l'ultimo riferimento per distruggere l'istanza DisplayInformation .

Esempi

È fondamentale per un'app che esegue il rendering di un'ampia gamma di colori e di un intervallo dinamico elevato per regolare dinamicamente le condizioni del monitor; o quando si spostano tra monitor. In un portatile, l'utente potrebbe regolare la luminosità dello schermo e che può regolare i parametri di mapping del tono forniti alle app.

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

Fabbisogno

Requisito Valore
client minimo supportato Windows 11 Build 22621
intestazione windows.graphics.display.interop.h