Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn mehrere Präsentationstechnologien in einer Anwendung verwendet werden, z. B. WPF, Win32 oder DirectX, müssen sie die Renderingbereiche innerhalb eines allgemeinen Fensters auf oberster Ebene freigeben. In diesem Thema werden Probleme beschrieben, die die Präsentation und Eingabe für Ihre WPF-Interoperabilitätsanwendung beeinflussen können.
Regionen
Innerhalb eines Fensters auf oberster Ebene können Sie konzipieren, dass jeder HWND, der eine der Technologien einer Interoperationsanwendung umfasst, über eine eigene Region (auch als "Luftraum" bezeichnet) verfügt. Jedes Pixel innerhalb des Fensters gehört genau einem HWND an und bildet den Bereich dieses HWND. (Streng genommen gibt es mehr als eine WPF-Region, wenn mehr als ein WPF HWND vorhanden ist, aber für diese Diskussion können Sie davon ausgehen, dass es nur eine gibt). Der Bereich impliziert, dass alle Ebenen oder andere Fenster, die versuchen, über diesem Pixel während der Anwendungslebensdauer zu rendern, Teil der gleichen Technologie auf Renderebene sein müssen. Der Versuch, WPF-Pixel über Win32 zu rendern, führt zu unerwünschten Ergebnissen und ist durch die Interoperations-APIs so weit wie möglich nicht zulässig.
Beispiele für Regionen
Die folgende Abbildung zeigt eine Anwendung, die Win32, DirectX und WPF kombiniert. Jede Technologie verwendet einen eigenen separaten, nicht überlappenden Satz von Pixeln, und es gibt keine Regionsprobleme.
Angenommen, diese Anwendung verwendet die Mauszeigerposition, um eine Animation zu erstellen, die versucht, über einen dieser drei Bereiche zu rendern. Unabhängig davon, welche Technologie für die Animation selbst verantwortlich war, würde diese Technologie gegen die Region der anderen beiden verstoßen. Die folgende Abbildung zeigt einen Versuch, einen WPF-Kreis über einen Win32-Bereich zu rendern.
Eine weitere Verletzung ist, wenn Sie versuchen, Transparenz/Alpha-Mischung zwischen verschiedenen Technologien zu verwenden. In der folgenden Abbildung verstößt die WPF-Box gegen die Win32- und DirectX-Bereiche. Da die Pixel in diesem WPF-Feld semitransparent sind, müssten sie gemeinsam von DirectX und WPF verwaltet werden, was nicht möglich ist. Dies ist also ein weiterer Verstoß und kann nicht gebaut werden.
In den vorherigen drei Beispielen wurden rechteckige Bereiche verwendet, aber unterschiedliche Formen sind möglich. Beispielsweise kann ein Bereich ein Loch aufweisen. Die folgende Abbildung zeigt eine Win32-Region mit einem rechteckigen Loch, dies ist die Größe der kombinierten WPF- und DirectX-Bereiche.
Regionen können auch vollständig nicht rechteckig sein oder jede beliebige Form annehmen, die durch ein Win32 HRGN (Region) beschreibbar ist.
Transparenz und Top-Level Windows
Der Fenster-Manager in Windows verarbeitet wirklich nur Win32 HWNDs. Daher ist jeder WPF Window ein HWND. Der Window HWND muss die allgemeinen Regeln für ein HWND einhalten. Innerhalb dieses HWND kann der WPF-Code alles tun, was alle Funktionen der WPF-APIs unterstützen. Für Interaktionen mit anderen HWNDs auf dem Desktop muss WPF jedoch die Win32-Verarbeitungs- und Renderingregeln einhalten. WPF unterstützt nicht rechteckige Fenster mithilfe von Win32-APIs – HRGNs für nicht rechteckige Fenster und überschichtete Fenster für ein Alpha pro Pixel.
Konstanter Alpha- und Farbschlüssel werden nicht unterstützt. Win32-Mehrschichtfensterfunktionen variieren je nach Plattform.
Überschichtete Fenster können das gesamte Fenster transluzent (semitransparent) machen, indem ein Alphawert angegeben wird, der auf jedes Pixel im Fenster angewendet werden soll. (Win32 unterstützt tatsächlich alpha pro Pixel, aber dies ist sehr schwierig in praktischen Programmen zu verwenden, da Sie in diesem Modus alle untergeordneten HWND selbst zeichnen müssen, einschließlich Dialogfelder und Dropdowns).
WPF unterstützt HRGNs; Für diese Funktionalität gibt es jedoch keine verwalteten APIs. Sie können den Plattformaufruf verwenden und HwndSource die relevanten Win32-APIs aufrufen. Weitere Informationen finden Sie unter Aufrufen nativer Funktionen aus verwaltetem Code.
WPF-Überschichtfenster verfügen über unterschiedliche Funktionen auf verschiedenen Betriebssystemen. Dies liegt daran, dass WPF DirectX zum Rendern verwendet, und Layerfenster wurden hauptsächlich für das GDI-Rendering und nicht für directX-Rendering entwickelt.
WPF unterstützt hardwarebeschleunigte Mehrschichtfenster.
WPF unterstützt keine Transparenzfarbschlüssel, da WPF nicht garantieren kann, die von Ihnen angeforderte genaue Farbe zu rendern, insbesondere wenn das Rendern hardwarebeschleunigt ist.
Weitere Informationen zu den Einschränkungen von Interop-Bereichen finden Sie unter HWNDs in WPF.
Siehe auch
.NET Desktop feedback