Übersicht über die Technologieregionen
Wenn mehrere Präsentationstechnologien in einer Anwendung verwendet werden, wie z.B. WPF, Win32 oder DirectX, müssen diese die Renderingbereiche in einem gemeinsamen Fenster auf der obersten Ebene gemeinsam verwenden. In diesem Thema werden die Probleme beschrieben, welche die Präsentation und Eingabe für Ihre WPF-Interoperationsanwendung beeinflussen können.
Regions
In einem obersten Fenster können Sie sich jedes HWND, das eine der Technologien einer Interoperationsanwendung umfasst, so vorstellen, als verfüge es über einen eigenen Bereich (auch als „Airspace“ bezeichnet). 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 Anwendungslebensdauer oberhalb dieses Pixels ein Rendering durchzuführen, Teil der gleichen Renderebenentechnologie sein müssen. Der Versuch, WPF-Pixel über Win32 zu rendern, führt zu unerwünschten Ergebnissen und ist während der Interoperation der APIs so weit wie möglich zu vermeiden.
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.
Nehmen wir an, diese Anwendung verwendet die Position des Mauszeigers, um eine Animation zu erstellen, die versucht, in einem dieser drei Bereiche ein Rendering durchzuführen. Unabhängig davon, welche Technologie für die Animation selbst verantwortlich ist, würde diese Technologie den Bereich der beiden anderen verletzen. Die folgende Abbildung zeigt einen Versuch, einen WPF-Kreis in einem Win32-Bereich zu rendern.
Auch der Versuch, Transparenz/Alphablending zwischen unterschiedlichen Technologien zu verwenden, stellt eine Verletzung dar. In der folgenden Abbildung verletzt das WPF-Feld die Win32- und DirectX-Bereiche. Da die Pixel in diesem WPFFeld semitransparent sind, müssten sie sowohl zu DirectX und WPF gehören, was nicht möglich ist. Dies ist eine weitere Verletzung und kann daher nicht erstellt werden.
In den drei vorhergehenden Beispielen wurden rechteckige Bereiche verwendet, andere Formen sind jedoch auch möglich. Ein Bereich kann z.B. ein Loch aufweisen. Die folgende Abbildung zeigt einen Ein32-Bereich mit einem rechteckigen Loch, dessen Größe dem kombinierten WPF- und DirectX-Bereich entspricht.
Bereiche müssen nicht rechteckig sein, und können jede Form aufweisen, die von einem Win32-HRGN (Bereich) definiert werden kann.
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 der WPF-Code alle Aktionen ausführen, die von WPF-APIs unterstützt werden. Bei Interaktionen mit anderen HWNDs auf dem Desktop muss WPF jedoch die Verarbeitungs- und Renderingregeln von Win32 beachten. Durch die Verwendung von Win32-APIs unterstützt WPF nicht rechteckige Fenster: HRGNs für nicht rechteckige Fenster und überlappende Fenster für Alphablending pro Pixel.
Konstante Alpha-Schlüssel und Farbhintergründe werden nicht unterstützt. Die Win32-Funktionen für überlappende Fenster variieren je nach Plattform.
Überlappende Fenster können dazu führen, dass das gesamte Fenster transparent (semitransparent) wird, indem ein auf jedes Pixel im Fenster anzuwendender Alphawert festgelegt wird. (Win32 unterstützt Alphablending pro Pixel, dessen Verwendung in praktischen Programmen allerdings sehr schwierig ist, da Sie in diesem Modus jedes untergeordnete HWND selbst zeichnen müssen, einschließlich der Dialogfelder und Dropdownmenüs).
WPF unterstützt HRGNs. Es sind jedoch keine verwalteten APIs für diese Funktion verfügbar. Mit Plattformaufrufen und HwndSource können Sie die entsprechenden Win32-APIs aufrufen. Weitere Informationen finden Sie unter Aufrufen nativer Funktionen aus verwaltetem Code.
Überlappende WPF-Fenster haben unter verschiedenen Betriebssystemen verschiedene Funktionen. Das liegt daran, dass WPF zum Rendern DirectX verwendet, und überlappende Fenster in erster Linie für GDI-Rendering und nicht für DirectX-Rendering konzipiert sind.
WPF unterstützt hardwarebeschleunigte überlappende Fenster.
WPF unterstützt keine Transparenzfarbschlüssel, da WPF nicht garantieren kann, dass die von Ihnen angeforderte Farbe exakt gerendert wird, insbesondere wenn das Rendern hardwarebeschleunigt ist.
Weitere Informationen zu den Einschränkungen von Interopregionen finden Sie unter HWNDs in WPF.
Siehe auch
.NET Desktop feedback