Bagikan melalui


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

Mengambil objek DisplayInformation untuk jendela yang ditentukan. GetForWindow selalu mengalokasikan dan mengembalikan DisplayInformation baru.

Sintaks

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

Parameter

window

Jenis: [in] HWND

Pegangan jendela.

riid

Jenis: [in] REFIID

GUID kelas DisplayInformation.

displayInfo

Jenis: [iid_is][retval][out] batal**

Penunjuk ke blok memori yang menerima penunjuk ke objek DisplayInformation yang dikembalikan.

Menampilkan nilai

Jenis: HRESULT

Jika fungsi berhasil, fungsi akan mengembalikan S_OK. Jika tidak, kode kesalahanHRESULT akan dikembalikan.

Keterangan

Sehingga DisplayInformation dapat memproses pergerakan jendela dan pesan perubahan DPI, hal ini mengaitkan perulangan pesan HWND Anda. Untuk memastikan bahwa itu terjadi dengan lancar, GetForWindow memiliki persyaratan berikut:

  • Argumen jendela harus HWND dari jendela tingkat atas yang dimiliki oleh utas saat ini.
  • Utas saat ini harus menjalankan Windows.System.DispatcherQueue , untuk menerima peristiwa.
  • Utas saat ini dapat berupa MTA atau STA.

Anda bertanggung jawab untuk: penembolokan DisplayInformation yang dibuat selama argumen jendela relevan; membatalkan pendaftaran penanganan aktivitas; dan menghilangkan referensi terakhir untuk menghancurkan instans DisplayInformation .

Contoh

Sangat penting bagi aplikasi yang merender gamut warna lebar dan konten rentang dinamis tinggi untuk menyesuaikan secara dinamis dengan kondisi monitor yang berubah; atau saat berpindah antar monitor. Pada laptop, pengguna mungkin menyesuaikan kecerahan layar, dan yang dapat menyesuaikan parameter pemetaan nada yang disediakan untuk aplikasi.

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

Persyaratan

   
Klien minimum yang didukung Windows 11 Build 22621
Header windows.graphics.display.interop.h