Przegląd Regiony technologiczne

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

Regiony

W oknie najwyższego poziomu można konceptualizacji, że każdy HWND, który składa się z jednej z technologii aplikacji międzyoperacyjnej, ma własny region (nazywany także "przestrzenią powietrzną"). Każdy piksel w oknie należy do dokładnie jednego elementu HWND, który stanowi region tego elementu HWND. (Dokładnie mówiąc, istnieje więcej niż jeden WPF region, 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 piksela w okresie istnienia aplikacji, muszą być częścią tej samej technologii renderowania. Próba renderowania WPF pikseli przez program Win32 powoduje niepożądane wyniki i jest niedozwolona w miarę możliwości za pośrednictwem interfejsów API operacji międzyoperacyjnych.

Przykłady regionów

Na poniższej ilustracji przedstawiono aplikację, która Miksuje Win32, DirectX i WPF . Każda technologia używa własnego, nienakładających się zestawów pikseli i nie ma żadnych problemów z regionem.

Przykład aplikacji, która Miksuje Win32, DirectX i WPF.

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

Próba renderowania kółka WPF w regionie Win32.

Inne naruszenie polega na tym, że próbujesz użyć mieszania folii/alfa między różnymi technologiami. Na poniższej ilustracji WPF pole narusza regiony Win32 i DirectX. Ze względu na to, że piksele w tym WPF polu są częściowo przezroczyste, muszą być wspólne przez program DirectX i WPF , co nie jest możliwe. Jest to inne naruszenie i nie można go skompilować.

Diagram przedstawiający pole WPF narusza regiony Win32 i DirectX.

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

Diagram, który pokazuje Region Win32 z prostokątnym otworem.

Regiony mogą być również całkowicie nieprostokątne lub dowolnego kształtu describable przez HRGN Win32 (region).

Diagram, który pokazuje Region nieprostokątny.

Przezroczystość i okna Top-Level

Menedżer okien w systemie Windows tylko naprawdę przetwarza HWND Win32. W związku z tym, co WPF Window jest HWND. WindowWłaściwość HWND musi przestrzegać ogólnych reguł dla dowolnego elementu HWND. W tym elemencie HWND WPF kod może wykonywać wszelkie ogólne WPF Obsługa interfejsów API. Jednak w przypadku interakcji z innymi atrybutami HWND na pulpicie WPF należy przestrzegać zasad przetwarzania i renderowania Win32. WPF obsługuje okna nieprostokątne przy użyciu interfejsów API Win32 — HRGNs dla okien nieprostokątnych i warstwowych okien dla alfa-pikseli.

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

Okna z warstwami mogą być przezroczyste w całym oknie (częściowo przezroczyste) przez określenie wartości alfa, która ma być stosowana do każdego piksela w oknie. (System Win32 w rzeczywistości obsługuje alfa w pikselach, ale jest to bardzo trudne do użycia w praktycznych programach, ponieważ w tym trybie konieczne jest narysowanie dowolnego elementu podrzędnego HWND, łącznie z okna dialogowe i listy rozwijane).

WPF obsługuje HRGNs; nie ma jednak żadnych zarządzanych interfejsów API dla tej funkcji. Można użyć wywołania platformy i HwndSource wywołać odpowiednie interfejsy API Win32. Aby uzyskać więcej informacji, zobacz wywoływanie funkcji natywnych z kodu zarządzanego.

WPF okna z warstwami mają różne możliwości w różnych systemach operacyjnych. Jest to spowodowane tym WPF , że program używa DirectX do renderowania, a warstwowe okna zostały głównie zaprojektowane do renderowania GDI, a nie renderowania DirectX.

  • WPF obsługuje sprzętowe przyspieszone okna z warstwami.

  • WPF Program nie obsługuje przezroczystych kluczy kolorów, ponieważ WPF nie może gwarantować dokładnego koloru, szczególnie gdy renderowanie jest przyspieszane sprzętowo.

Zobacz też