Przegląd Regiony technologiczne

Jeśli w aplikacji jest używanych wiele technologii prezentacji, takich jak WPF, Win32 lub DirectX, muszą one udostępniać obszary renderowania w typowym oknie najwyższego poziomu. W tym temacie opisano problemy, które mogą mieć wpływ na prezentację i dane wejściowe aplikacji współdziałania WPF.

Regiony

W oknie najwyższego poziomu można koncepcyjnie określić, że każdy HWND, który składa się z jednej z technologii aplikacji międzyoperacyjnej ma swój własny region (nazywany również "przestrzenią powietrzną"). Każdy piksel w oknie należy do dokładnie jednego HWND, który stanowi region tego HWND. (Ściśle mówiąc, istnieje więcej niż jeden region WPF, jeśli istnieje więcej niż jeden WPF HWND, ale na potrzeby tej dyskusji, można założyć, że jest tylko jeden). Region oznacza, że wszystkie warstwy lub inne okna, które próbują renderować powyżej tego piksela w okresie istnienia aplikacji, muszą być częścią tej samej technologii na poziomie renderowania. Próba renderowania pikseli WPF w systemie Win32 prowadzi do niepożądanych wyników i jest niedozwolona jak najwięcej za pośrednictwem interfejsów API współdziałania.

Przykłady regionów

Na poniższej ilustracji przedstawiono aplikację, która miesza Win32, DirectX i WPF. Każda technologia używa własnego oddzielnego, nienakładanego zestawu pikseli i nie ma problemów z regionem.

An example of an application that mixes Win32, DirectX, and WPF.

Załóżmy, że ta aplikacja używa pozycji wskaźnika myszy do utworzenia animacji, która próbuje renderować w dowolnym z tych trzech regionów. Niezależnie od tego, która technologia była odpowiedzialna za samą animację, technologia ta naruszałaby region pozostałych dwóch. Na poniższej ilustracji przedstawiono próbę renderowania okręgu WPF w regionie Win32.

An attempt to render a WPF circle over a Win32 region.

Innym naruszeniem jest próba użycia przezroczystości/mieszania alfa między różnymi technologiami. Na poniższej ilustracji pole WPF narusza regiony Win32 i DirectX. Ponieważ piksele w tym polu WPF są półprzezroczyste, musiałyby być własnością wspólną zarówno przez DirectX, jak i WPF, co nie jest możliwe. Jest to więc kolejne naruszenie i nie można go skompilować.

Diagram showing a WPF box violating the Win32 and DirectX regions.

W poprzednich trzech przykładach użyto prostokątnych regionów, ale możliwe są różne kształty. Na przykład region może mieć dziurę. Na poniższej ilustracji przedstawiono region Win32 z prostokątnym otworem, który jest rozmiarem połączonych regionów WPF i DirectX.

Diagram that shows a Win32 region with a rectangular hole.

Regiony mogą być również całkowicie nierektangularne lub dowolny kształt opisywany przez win32 HRGN (region).

Diagram that shows a nonrectangular region.

Przezroczystość i okna najwyższego poziomu

Menedżer okien w systemie Windows przetwarza tylko win32 HWNDs. W związku z tym każdy WPF Window jest HWND. HWND Window musi przestrzegać ogólnych zasad dotyczących każdego HWND. W ramach tego HWND kod WPF może wykonywać wszystkie ogólne interfejsy API WPF. Jednak w przypadku interakcji z innymi HWNDs na pulpicie, WPF musi przestrzegać reguł przetwarzania i renderowania Win32. WPF obsługuje okna nie prostokątne przy użyciu interfejsów API Win32 — HRGN dla okien nie prostokątnych i okien warstwowych dla alfa na piksel.

Stałe klucze alfa i kolorowe nie są obsługiwane. Możliwości okien warstwowych Win32 różnią się w zależności od platformy.

Okna warstwowe mogą sprawić, że całe okno będzie przezroczyste (półprzezroczyste), określając wartość alfa, która ma być stosowana do każdego piksela w oknie. (Win32 w rzeczywistości obsługuje alfa na piksel, ale jest to bardzo trudne do użycia w praktycznych programach, ponieważ w tym trybie należy rysować wszystkie podrzędne HWND samodzielnie, w tym okna dialogowe i listy rozwijane).

WPF obsługuje sieci HRGN; jednak nie ma zarządzanych interfejsów API dla tej funkcji. Możesz użyć wywołania platformy i HwndSource wywołania odpowiednich interfejsów API Win32. Aby uzyskać więcej informacji, zobacz Wywoływanie funkcji natywnych z kodu zarządzanego.

Okna warstwowe WPF mają różne możliwości w różnych systemach operacyjnych. Wynika to z faktu, że WPF używa directX do renderowania, a okna warstwowe zostały zaprojektowane głównie na potrzeby renderowania GDI, a nie renderowania DirectX.

  • WPF obsługuje przyspieszone sprzętowe okna warstwowe.

  • WPF nie obsługuje kluczy kolorów przezroczystości, ponieważ WPF nie może zagwarantować renderowania dokładnego żądanego koloru, szczególnie w przypadku przyspieszania sprzętu.

Zobacz też