Compartilhar via


Método IDisplayInformationStaticsInterop::GetForWindow (windows.graphics.display.interop.h)

Recupera um objeto DisplayInformation para a janela especificada. GetForWindow sempre aloca e retorna um novo DisplayInformation.

Sintaxe

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

Parâmetros

window

Tipo: [in] HWND

O identificador da janela.

riid

Tipo: [in] REFIID

O GUID da classe DisplayInformation.

displayInfo

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

Um ponteiro para um bloco de memória que recebe um ponteiro para o objeto DisplayInformation retornado.

Valor de retorno

Tipo: HRESULT

Se a função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um de código de erro HRESULT.

Observações

Para que DisplayInformation possa processar movimentos de janela e mensagens de alteração de DPI, ele conecta o loop de mensagem do HWND. Para garantir que isso ocorra sem problemas, GetForWindow tem os seguintes requisitos:

  • O argumento da janela deve ser o HWND de uma janela de nível superior que pertence ao thread atual.
  • O thread atual deve ter um Windows.System.DispatcherQueue em execução para receber eventos.
  • O thread atual pode ser MTA ou STA.

Você é responsável por: armazenar em cache o DisplayInformation criado, desde que o argumento de janela seja relevante; desativar o registro de manipuladores de eventos; e descartando a última referência para destruir a instância DisplayInformation.

Exemplos

É vital que um aplicativo que renderize conteúdo de gama de cores largas e de alto intervalo dinâmico se ajuste dinamicamente às condições de alteração do monitor; ou ao mover entre monitores. Em um laptop, o usuário pode ajustar o brilho da tela e isso pode ajustar os parâmetros de mapeamento de tom fornecidos aos aplicativos.

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

Requisitos

Requisito Valor
de cliente com suporte mínimo Build 22621 do Windows 11
cabeçalho windows.graphics.display.interop.h