Freigeben über


Übersicht über die Technologieregionen

Wenn mehrere Präsentationstechnologien wie WPF, Win32 oder DirectX in einer Anwendung verwendet werden, müssen sie die Renderingbereiche in einem gemeinsamen Fenster auf der obersten Ebene gemeinsam nutzen. In diesem Thema werden Probleme beschrieben, die die Präsentation und Eingabe für die WPF-Interoperationsanwendung betreffen.

Bereiche

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 Bereich (bezeichnet als "Airspace"). Jedes Pixel im Fenster gehört zu genau einem HWND, das den Bereich dieses HWND bildet. (Genau genommen ist mehr als ein WPF-Bereich vorhanden, wenn mehrere WPF-HWNDs vorhanden sind. Für diese Diskussion wird jedoch davon ausgegangen, dass nur ein HWND vorhanden ist). Der Bereich 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.

Beispiele für Bereiche

Die folgende Abbildung zeigt eine Anwendung, in der Win32, DirectX und WPF kombiniert werden. Jede Technologie verwendet einen eigenen, nicht überlappenden Satz von Pixeln, und es gibt keine Probleme mit dem Bereich.

Ein Fenster ohne Airspace-Probleme

Angenommen, diese Anwendung verwendet die Position des Mauszeigers, um eine Animation zu erstellen, die versucht, in einem dieser drei Bereiche einen Rendervorgang durchzuführen. Unabhängig davon, welche Technologie für die Animation selbst verantwortlich ist, verletzt diese Technologie den Bereich der beiden anderen. Die folgende Abbildung zeigt einen Versuch, einen WPF-Kreis in einem Win32-Bereich zu rendern.

Interop-Diagramm

Auch der Versuch, Transparenz/Alphablending zwischen verschiedenen Technologien zu verwenden, führt zu einer Verletzung des Bereichs. In der folgenden Abbildung verletzt das WPF-Feld die Win32- und DirectX-Bereiche. 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. Daher liegt eine weitere Verletzung vor, und die Erstellung ist nicht möglich.

Interop-Diagramm

In den vorhergehenden drei Beispielen wurden rechteckige Bereiche verwendet, es sind jedoch unterschiedliche Formen möglich. Ein Bereich kann z. B. ein Loch aufweisen. Die folgende Abbildung zeigt einen Win32-Bereich mit einem rechteckigen Loch, dessen Größe den kombinierten WPF- und DirectX-Bereichen entspricht.

Interop-Diagramm

Bereiche können auch nicht rechteckig sein oder eine beliebige Form aufweisen, die von einem Win32-HRGN (Bereich) definiert wird.

Interop-Diagramm

Transparenz und Fenster der obersten Ebene

Der Fenster-Manager in Windows verarbeitet tatsächlich nur Win32-HWNDs. Daher ist jedes WPF-Window ein HWND. 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 unterschiedliche Funktionen. Dies ist darauf zurückzuführen, dass WPF zum Rendern DirectX verwendet und überlappende Fenster hauptsächlich für das GDI-Rendering konzipiert sind, nicht für das DirectX-Rendering.

  • WPF unterstützt hardwarebeschleunigte überlappende Fenster unter Windows Vista und höher. 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 der Anwendung 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

Exemplarische Vorgehensweise: Hosten einer WPF-Uhr in Win32

Hosten von Win32-Inhalt in WPF

Konzepte

Interaktion zwischen WPF und Win32