Bagikan melalui


IDXGIFactory::Metode MakeWindowAssociation (dxgi.h)

Memungkinkan DXGI memantau antrean pesan aplikasi untuk urutan kunci alt-enter (yang menyebabkan aplikasi beralih dari jendela ke layar penuh atau sebaliknya).

Sintaks

HRESULT MakeWindowAssociation(
  HWND WindowHandle,
  UINT Flags
);

Parameter

WindowHandle

Jenis: HWND

Handel jendela yang akan dipantau. Parameter ini bisa NULL; tetapi hanya jika Bendera juga 0.

Flags

Jenis: UINT

Satu atau beberapa nilai berikut ini.

  • DXGI_MWA_NO_WINDOW_CHANGES - Mencegah DXGI memantau antrean pesan aplikasi; ini membuat DXGI tidak dapat merespons perubahan mode.
  • DXGI_MWA_NO_ALT_ENTER - Mencegah DXGI merespons urutan alt-enter.
  • DXGI_MWA_NO_PRINT_SCREEN - Mencegah DXGI merespons kunci layar cetak.

Menampilkan nilai

Jenis: HRESULT

DXGI_ERROR_INVALID_CALL jika WindowHandle tidak valid, atau E_OUTOFMEMORY.

Keterangan

Catatan Jika Anda memanggil API ini dalam proses Sesi 0, api akan mengembalikan DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.
 
Kombinasi WindowHandle dan Flags menginformasikan DXGI untuk menghentikan pemantauan pesan jendela untuk jendela yang terkait sebelumnya.

Jika aplikasi beralih ke mode layar penuh, DXGI akan memilih resolusi layar penuh untuk menjadi resolusi terkecil yang didukung yang lebih besar atau ukuran yang sama dengan ukuran buffer belakang saat ini.

Aplikasi dapat membuat beberapa perubahan untuk membuat transisi dari jendela ke layar penuh lebih efisien. Misalnya, pada pesan WM_SIZE, aplikasi harus merilis buffer swap-chain back yang luar biasa, memanggil IDXGISwapChain::ResizeBuffers, lalu memperoleh kembali buffer kembali dari rantai pertukaran. Ini memberi rantai pertukaran kesempatan untuk mengubah ukuran buffer belakang, dan/atau membuatnya kembali untuk mengaktifkan operasi membalik layar penuh. Jika aplikasi tidak melakukan urutan ini, DXGI masih akan melakukan transisi layar penuh/berjendela, tetapi mungkin dipaksa untuk menggunakan operasi peregangan (karena buffer belakang mungkin bukan ukuran yang benar), yang mungkin kurang efisien. Bahkan jika peregangan tidak diperlukan, presentasi mungkin tidak optimal karena buffer belakang mungkin tidak dapat dipertukarkan secara langsung dengan buffer depan. Dengan demikian, panggilan ke ResizeBuffers pada WM_SIZE selalu direkomendasikan, karena WM_SIZE selalu dikirim selama transisi layar penuh.

Saat berjendela, aplikasi dapat, jika memilih, membatasi ukuran area klien jendelanya ke ukuran penyajian yang nyaman. Aplikasi yang sepenuhnya fleksibel tidak akan membuat pembatasan seperti itu, tetapi elemen UI atau pertimbangan desain lainnya, tentu saja, membuat fleksibilitas ini tidak dapat dipertahankan. Jika aplikasi selanjutnya memilih untuk membatasi area klien jendelanya hanya untuk yang cocok dengan resolusi layar penuh yang didukung, aplikasi dapat WM_SIZING bidang, lalu periksa terhadap IDXGIOutput::FindClosestMatchingMode. Jika mode pencocokan ditemukan, izinkan mengubah ukuran. (IDXGIOutput dapat diambil dari IDXGISwapChain::GetContainingOutput. Perubahan berikutnya yang tidak ada pada topologi desktop, ini akan menjadi output yang sama yang akan dipilih ketika alt-enter dilapisi dan mode layar penuh dimulai untuk rantai pertukaran tersebut.)

Aplikasi yang ingin menangani perubahan mode atau Alt+Enter sendiri harus memanggil MakeWindowAssociation dengan bendera DXGI_MWA_NO_WINDOW_CHANGES setelah pembuatan rantai pertukaran. Argumen WindowHandle , jika non-NULL, menentukan bahwa antrean pesan aplikasi tidak akan ditangani oleh runtime DXGI untuk semua rantai pertukaran dari HWND target tertentu. Memanggil MakeWindowAssociation dengan bendera DXGI_MWA_NO_WINDOW_CHANGES setelah pembuatan swapchain memastikan bahwa DXGI tidak akan mengganggu penanganan perubahan mode jendela aplikasi atau Alt+Enter.

Anda harus memanggil metode MakeWindowAssociation pada objek pabrik yang terkait dengan rantai pertukaran HWND target. Anda dapat menjamin bahwa dengan memanggil metode IDXGIObject::GetParent pada rantai pertukaran untuk menemukan pabrik. Berikut adalah contoh kode untuk melakukannya.

void MakeWindowAssociationWithLocatedFactory(
    winrt::com_ptr<IDXGISwapChain> const& swapChain,
    HWND hWnd,
    UINT flags)
{
    winrt::com_ptr<IDXGIFactory1> factory;
    factory.capture(swapChain, &IDXGISwapChain::GetParent);
    factory->MakeWindowAssociation(hWnd, flags);
}

Catatan untuk aplikasi Bursa Windows

Jika aplikasi Windows Store memanggil MakeWindowAssociation, aplikasi tersebut gagal dengan DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.

Aplikasi Microsoft Win32 dapat menggunakan MakeWindowAssociation untuk mengontrol transisi layar penuh melalui kombinasi tombol Alt+Enter dan perilaku layar cetak untuk layar penuh. Untuk aplikasi Bursa Windows, karena DXGI tidak dapat melakukan transisi layar penuh, aplikasi Bursa Windows tidak memiliki cara untuk mengontrol transisi layar penuh.

Persyaratan

   
Target Platform Windows
Header dxgi.h
Pustaka DXGI.lib

Lihat juga

Antarmuka DXGI

IDXGIFactory