Bagikan melalui


Gambaran Umum Wilayah Teknologi

Jika beberapa teknologi presentasi digunakan dalam aplikasi, seperti WPF, Win32, atau DirectX, mereka harus berbagi area penyajian dalam jendela tingkat atas umum. Topik ini menjelaskan masalah yang mungkin memengaruhi presentasi dan input untuk aplikasi interoperatur WPF Anda.

Wilayah

Dalam jendela tingkat atas, Anda dapat mengkonsep bahwa setiap HWND yang terdiri dari salah satu teknologi aplikasi interoperabilitas memiliki wilayahnya sendiri (juga disebut "ruang udara"). Setiap piksel dalam jendela milik tepat satu HWND, yang merupakan wilayah HWND tersebut. (Secara ketat, ada lebih dari satu wilayah WPF jika ada lebih dari satu WPF HWND, tetapi untuk tujuan diskusi ini, Anda dapat berasumsi hanya ada satu). Wilayah ini menyiratkan bahwa semua lapisan atau jendela lain yang mencoba merender di atas piksel tersebut selama masa pakai aplikasi harus menjadi bagian dari teknologi tingkat render yang sama. Mencoba merender piksel WPF melalui Win32 menyebabkan hasil yang tidak diinginkan, dan dilarang sebanyak mungkin melalui API interoperabilitas.

Contoh Wilayah

Ilustrasi berikut menunjukkan aplikasi yang mencampur Win32, DirectX, dan WPF. Setiap teknologi menggunakan set piksel yang terpisah dan tidak tumpang tindih, dan tidak ada masalah wilayah.

Contoh aplikasi yang mencampur Win32, DirectX, dan WPF.

Misalkan aplikasi ini menggunakan posisi penunjuk mouse untuk membuat animasi yang mencoba merender di salah satu dari tiga wilayah ini. Tidak peduli teknologi mana yang bertanggung jawab atas animasi itu sendiri, teknologi itu akan melanggar wilayah dua lainnya. Ilustrasi berikut menunjukkan upaya untuk merender lingkaran WPF di atas wilayah Win32.

Upaya untuk merender lingkaran WPF di atas wilayah Win32.

Pelanggaran lain adalah jika Anda mencoba menggunakan transparency/alpha blending antara teknologi yang berbeda. Dalam ilustrasi berikut, kotak WPF melanggar wilayah Win32 dan DirectX. Karena piksel dalam kotak WPF tersebut semi transparan, piksel harus dimiliki bersama oleh DirectX dan WPF, yang tidak dimungkinkan. Jadi ini adalah pelanggaran lain dan tidak dapat dibangun.

Diagram memperlihatkan kotak WPF yang melanggar wilayah Win32 dan DirectX.

Tiga contoh sebelumnya menggunakan wilayah persegi panjang, tetapi bentuk yang berbeda dimungkinkan. Misalnya, suatu wilayah dapat memiliki lubang. Ilustrasi berikut menunjukkan wilayah Win32 dengan lubang persegi panjang ini adalah ukuran wilayah WPF dan DirectX yang digabungkan.

Diagram yang memperlihatkan wilayah Win32 dengan lubang persegi panjang.

Wilayah juga dapat sepenuhnya nonrektangular, atau bentuk apa pun yang dapat digambarkan oleh Win32 HRGN (wilayah).

Diagram yang memperlihatkan wilayah nonrektangular.

Transparansi dan Windows Tingkat Atas

Manajer jendela di Windows hanya benar-benar memproses Win32 HWND. Oleh karena itu, setiap WPF Window adalah HWND. Window HWND harus mematuhi aturan umum untuk HWND apa pun. Dalam HWND itu, kode WPF dapat melakukan apa pun dukungan API WPF secara keseluruhan. Tetapi untuk interaksi dengan HWND lain di desktop, WPF harus mematuhi aturan pemrosesan dan penyajian Win32. WPF mendukung jendela non-persegi panjang dengan menggunakan API Win32—HRGN untuk jendela non-persegi panjang, dan jendela berlapis untuk alfa per piksel.

Tombol alfa dan warna konstanta tidak didukung. Kemampuan jendela berlapis Win32 bervariasi menurut platform.

Jendela berlapis dapat membuat seluruh jendela tembus (semi transparan) dengan menentukan nilai alfa untuk diterapkan ke setiap piksel di jendela. (Win32 sebenarnya mendukung alfa per piksel, tetapi ini sangat sulit digunakan dalam program praktis karena dalam mode ini Anda harus menggambar HWND anak apa pun sendiri, termasuk dialog dan dropdown).

WPF mendukung SDM; namun, tidak ada API terkelola untuk fungsionalitas ini. Anda dapat menggunakan pemanggilan platform dan HwndSource untuk memanggil API Win32 yang relevan. Untuk informasi selengkapnya, lihat Memanggil Fungsi Asli dari Kode Terkelola.

Jendela berlapis WPF memiliki kemampuan yang berbeda pada sistem operasi yang berbeda. Ini karena WPF menggunakan DirectX untuk merender, dan jendela berlapis terutama dirancang untuk penyajian GDI, bukan penyajian DirectX.

  • WPF mendukung jendela berlapis yang dipercepat perangkat keras.

  • WPF tidak mendukung kunci warna transparansi, karena WPF tidak dapat menjamin untuk merender warna tepat yang Anda minta, terutama ketika penyajian dipercepat perangkat keras.

Untuk informasi selengkapnya mengenai batasan wilayah interop, lihat HWND di dalam WPF.

Lihat juga