Freigeben über


WPF-Interoperation: "Airspace" und Übersicht über Fensterbereiche

Aktualisiert: November 2007

Der "Airspace" ist ein konzeptioneller Ansatz zum Verständnis, wie die beiden Hälften einer Interoperationsanwendung die Renderingbereiche in einem gemeinsamen Fenster auf der obersten Ebene zusammen nutzen. In diesem Thema wird erläutert, welche möglichen Auswirkungen das Konzept des "Airspaces" auf den Präsentationsentwurf sowie auf die Eingabeüberlegungen für die von Ihnen erstellte WPF-Interoperationsanwendung hat.

Airspace

In einem Fenster der obersten Ebene können Sie sich jedes HWND, das eine der Technologien einer Interoperationsanwendung umfasst, so vorstellen, als verfüge es über einen eigenen "Airspace". Jedes Pixel im Fenster gehört zu genau einem HWND, was den Airspace dieses HWND bildet. (Genau genommen ist mehr als ein WPF-Airspace vorhanden, wenn es mehr als ein WPF-HWND gibt; um Ihnen das Konzept besser erläutern zu können, sollten Sie jedoch davon ausgehen, dass in den Beispielen in diesem Thema nur einer vorhanden ist). Das Konzept des Airspaces impliziert, dass alle Ebenen oder anderen Fenster, die versuchen, während der Lebensdauer der Anwendung oberhalb dieses Pixels einen Rendervorgang durchzuführen, Teil der gleichen Renderebenentechnologie sein müssen. Der Versuch, WPF-Pixel über Win32 zu rendern, führt zu unerwünschten Ergebnissen und wird während der Interoperation APIs so weit wie möglich vermieden.

Erläuterung des Airspaces anhand eines Beispiels

Im ersten Beispiel wird eine Anwendung veranschaulicht, die Win32, DirectX und WPF kombiniert. Jede Technologie verwendet ihren eigenen, nicht überlappenden Satz von Pixeln, und es gibt keine Probleme mit dem Airspace.

Ein Fenster ohne Airspace-Probleme

Nehmen Sie jedoch an, dass Sie mit einer Anwendung beginnen und eine Animation erstellen, die durch die Position des Mauszeigers bestimmt wird und daher versuchen kann, in einem beliebigen dieser drei Bereiche einen Rendervorgang durchzuführen. Dies führt schließlich dazu, dass Airspace verletzt wird. Unabhängig davon, welche Technologie für die Animation selbst verantwortlich ist, verletzt diese Technologie den Airspace der beiden anderen. Dies ist in der folgenden Abbildung dargestellt, wobei der grüne Kreis versucht, sich im Fenster zu bewegen:

Interop-Diagramm

Auch der Versuch, Transparenz/Alphablending zwischen verschiedenen Technologien zu verwenden, führt zu einer Verletzung des Airspaces. Im unten dargestellten Bild verletzt das WPF-Feld den Airspace von Win32 und DirectX. Da die Pixel im WPF-Feld halbtransparent sind, müssten sie sowohl zu DirectX als auch zu WPF gehören, was nicht möglich ist. Hierbei handelt es sich also erneut um eine Verletzung des Lauftraums, und die Erstellung ist nicht möglich:

Interop-Diagramm

In den vorhergehenden drei Beispielen wurden rechteckige Bereiche verwendet, der Airspace muss jedoch nicht unbedingt rechteckig sein. Er kann ein Rechteck mit einem Loch sein (z. B. bildet der Win32-Airspace hier den gesamten Bereich außer dem WPF-Airspace und dem DirectX-Airspace):

Interop-Diagramm

Lufträume können auch ganz anders als rechteckig sein oder eine beliebige Form aufweisen, die von Win32-HRGN (Bereich) definiert wird:

Interop-Diagramm

Transparenz und Fenster der obersten Ebene

Der Fenster-Managerprozess (sowohl in Windows Vista als auch in Microsoft Windows XP) verarbeitet genau genommen nur Win32-HWNDs, sodass jedes WPF Window ein HWND ist. Das Window-HWND muss die allgemeinen Richtlinien für alle HWNDs erfüllen. Innerhalb dieses HWND kann durch WPF-Code alles durchgeführt werden, was von WPF APIs unterstützt wird. Zur Interaktion mit anderen HWNDs auf dem Desktop muss WPF die Verarbeitungs- und Renderingregeln von Win32 beachten. WPF unterstützt nicht rechteckige Fenster durch die Verwendung von Win32 APIs-HRGNs für nicht rechteckige Fenster und überlappende Fenster für Alphablending pro Pixel.

Konstante Alpha- und Hintergrundfarben werden nicht unterstützt. Die Funktionen für überlappende Fenster in Win32 unterscheiden sich je nach Plattform.

Überlappende Fenster können dazu führen, dass das gesamte Fenster lichtdurchlässig (halbtransparent) wird, indem ein Alphawert festgelegt wird, der auf jedes Pixel im Fenster angewendet wird. (Win32 unterstützt tatsächlich Alphablending pro Pixel, wobei dies in praktischen Programmen jedoch sehr schwer anwendbar ist, da Sie in diesem Modus jedes untergeordnete HWND selbst zeichnen müssten, einschließlich Dialogfelder und Dropdownmenüs).

WPF unterstützt HRGNs, wobei jedoch keine verwalteten APIs für diese Funktion verfügbar sind. Sie können Plattformaufrufe und HwndSource verwenden, um die relevanten Win32 APIs aufzurufen. Weitere Informationen finden Sie unter Aufrufen systemeigener Funktionen aus verwaltetem Code.

Überlappende Fenster in WPF bieten auf verschiedenen Betriebssystemen verschiedene Möglichkeiten (da WPF zum Rendern DirectX verwendet und überlappende Fenster primär für das GDI-Rendering und nicht das DirectX-Rendering ausgelegt sind):

  • WPF unterstützt hardwarebeschleunigte überlappende Fenster unter Windows Vista. Hardwarebeschleunigte überlappende Fenster unter Microsoft Windows XP erfordern Unterstützung von Microsoft DirectX, sodass die Möglichkeiten von der Microsoft DirectX-Version auf dem Computer abhängen.

  • WPF unterstützt keine Transparenz-Hintergrundfarben, da WPF nicht garantieren kann, dass genau die angeforderte Farbe gerendert werden kann, insbesondere dann nicht, wenn das Rendering hardwarebeschleunigt ist.

  • Bei der Ausführung unter Microsoft Windows XP führen überlappende Fenster über DirectX-Oberflächen zu einem Flackern, wenn die DirectX-Anwendung das Rendering ausführt. (Die eigentliche Renderingreihenfolge sieht wie folgt aus: Microsoft Windows Graphics Device Interface (GDI) blendet das überlappende Fenster aus, anschließend zeichnet DirectX, und dann zeigt Microsoft Windows Graphics Device Interface (GDI) das überlappende Fenster wieder an.) Nicht überlappende WPF-Fenster weisen diese Einschränkung ebenfalls auf.

Siehe auch

Aufgaben

Lernprogramm: Erstellen einer Win32-Anwendung zum Hosten von WPF-Inhalten

Lernprogramm: Erstellen einer WPF-Anwendung zum Hosten von Win32-Inhalten

Konzepte

Übersicht über die Interaktion zwischen WPF und Win32