Přehled technologie oblastí

Pokud se v aplikaci používá více prezentačních technologií, jako je WPF, Win32 nebo DirectX, musí sdílet oblasti vykreslování v rámci společného okna nejvyšší úrovně. Toto téma popisuje problémy, které můžou ovlivnit prezentaci a vstup pro vaši interoperační aplikaci WPF.

Oblasti

V okně nejvyšší úrovně můžete koncepčně určit, že každý HWND, který se skládá z jedné z technologií interoperační aplikace, má svou vlastní oblast (označovanou také jako "vzdušné prostředí"). Každý pixel v okně patří přesně jednomu HWND, který představuje oblast tohoto HWND. (Přísně řečeno, existuje více než jedna oblast WPF, pokud existuje více než jeden WPF HWND, ale pro účely této diskuze můžete předpokládat, že existuje pouze jeden). Oblast znamená, že všechny vrstvy nebo jiná okna, která se pokusí vykreslit nad daný pixel během životnosti aplikace, musí být součástí stejné technologie na úrovni vykreslování. Pokus o vykreslení pixelů WPF přes Win32 vede k nežádoucím výsledkům a je nepovolen co nejvíce prostřednictvím rozhraní API pro spolupráci.

Příklady oblastí

Následující obrázek znázorňuje aplikaci, která kombinuje Win32, DirectX a WPF. Každá technologie používá svou vlastní samostatnou, nepřekrývající se sadu pixelů a žádné problémy s oblastí.

Příklad aplikace, která kombinuje Win32, DirectX a WPF.

Předpokládejme, že tato aplikace používá pozici ukazatele myši k vytvoření animace, která se pokusí vykreslit přes některou z těchto tří oblastí. Bez ohledu na to, která technologie byla zodpovědná za samotnou animaci, by tato technologie porušila oblast ostatních dvou. Následující obrázek znázorňuje pokus o vykreslení kruhu WPF přes oblast Win32.

Pokus o vykreslení kruhu WPF přes oblast Win32.

Dalším porušením je, když se pokusíte použít průhlednost/alfa prolnutí mezi různými technologiemi. Na následujícím obrázku pole WPF porušuje oblasti Win32 a DirectX. Vzhledem k tomu, že pixely v rámečku WPF jsou poloprůhledné, musely by být ve společném vlastnictví directX i WPF, což není možné. Toto je další porušení a nelze ho vytvořit.

Diagram znázorňující pole WPF, které porušuje oblasti Win32 a DirectX

Předchozí tři příklady používaly obdélníkové oblasti, ale různé obrazce jsou možné. Například oblast může mít díru. Následující obrázek znázorňuje oblast Win32 s obdélníkovým otvorem, což je velikost kombinované oblasti WPF a DirectX.

Diagram znázorňující oblast Win32 s obdélníkovým otvorem

Oblasti můžou být také zcela nonrectangular nebo jakýkoli obrazec popisující win32 HRGN (region).

Diagram znázorňující nerectangulární oblast

Průhlednost a okna nejvyšší úrovně

Správce oken ve Windows ve skutečnosti zpracovává pouze pevné disky Win32. Proto každý WPF Window je HWND. Window HWND musí dodržovat obecná pravidla pro jakýkoli HWND. V rámci daného HWND může kód WPF dělat cokoli, co podporuje celková rozhraní API WPF. Pro interakce s jinými HWND na stolním počítači se ale WPF musí řídit pravidly zpracování a vykreslování Win32. WPF podporuje ne obdélníková okna pomocí rozhraní API Win32 – HRGN pro neúhledná okna a vrstvené okna pro alfa na pixel.

Konstantní alfa a barevné klávesy nejsou podporovány. Možnosti okna s vrstvou Win32 se liší podle platformy.

Vrstvené okna můžou zajistit průsvitné celé okno (poloprůhledné) zadáním alfa hodnoty, která se má použít u každého pixelu v okně. (Win32 ve skutečnosti podporuje alfa na pixel, ale to je velmi obtížné použít v praktických programech, protože v tomto režimu byste museli nakreslit jakýkoli podřízený HWND sami, včetně dialogů a rozevíracích seznamu).

WPF podporuje HRGN; pro tuto funkci však neexistují žádná spravovaná rozhraní API. Můžete použít volání platformy a HwndSource volání příslušných rozhraní API Win32. Další informace naleznete v tématu Volání nativních funkcí ze spravovaného kódu.

Okna s vrstvenými wpf mají různé možnosti v různých operačních systémech. Důvodem je to, že WPF používá k vykreslení DirectX a vrstvené okna byly primárně navrženy pro vykreslování GDI, nikoli pro vykreslování DirectX.

  • WPF podporuje hardwarově akcelerovaná okna vrstvených vrstev.

  • WPF nepodporuje barevné klávesy průhlednosti, protože WPF nemůže zaručit vykreslení přesné barvy, kterou jste požadovali, zejména při vykreslování hardwarově akcelerované.

Další informace o omezeních oblastí spolupráce najdete v tématu HWND uvnitř WPF.

Viz také