Partager via


IDisplayInformationStaticsInterop ::GetForWindow, méthode (windows.graphics.display.interop.h)

Récupère un objet DisplayInformation pour la fenêtre spécifiée. GetForWindow alloue toujours et retourne une nouvelle DisplayInformation.

Syntaxe

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

Paramètres

window

Type : [in] HWND

Handle de la fenêtre.

riid

Type : [in] REFIID

GUID de la classe DisplayInformation .

displayInfo

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

Pointeur vers un bloc de mémoire qui reçoit un pointeur vers l’objet DisplayInformation retourné.

Valeur de retour

Type : HRESULT

Si la fonction réussit, elle retourne S_OK. Sinon, elle retourne un HRESULTcode d’erreur.

Remarques

Ainsi, DisplayInformation peut traiter les mouvements de fenêtre et les messages de modification DPI, il raccorde la boucle de message de votre HWND. Pour vous assurer que cela se produit correctement, GetForWindow a les exigences suivantes :

  • L’argument de fenêtre doit être le HWND d’une fenêtre de niveau supérieur appartenant au thread actif.
  • Le thread actuel doit avoir un Windows.System.DispatcherQueue en cours d’exécution, afin de recevoir des événements.
  • Le thread actuel peut être MTA ou STA.

Vous êtes responsable de la mise en cache de l' DisplayInformation créée tant que l’argument de fenêtre est pertinent ; désinscrire des gestionnaires d’événements ; et la suppression de la dernière référence pour détruire l’instance DisplayInformation.

Exemples

Il est essentiel pour une application qui affiche un large éventail de couleurs et un contenu à plage dynamique élevée pour s’ajuster dynamiquement aux conditions changeantes du moniteur ; ou lors du déplacement entre les moniteurs. Sur un ordinateur portable, l’utilisateur peut ajuster la luminosité de l’écran et ajuster les paramètres de mappage de tonalité fournis aux applications.

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

Exigences

Exigence Valeur
client minimum pris en charge Windows 11 Build 22621
d’en-tête windows.graphics.display.interop.h