Partager via


Vue d'ensemble des régions de technologie

Si plusieurs technologies de présentation sont utilisées dans une application (par exemple, WPF, Win32 ou DirectX), elles doivent partager les zones de rendu dans une fenêtre de niveau supérieur commune. Cette rubrique décrit les problèmes qui peuvent avoir un impact sur la présentation et les entrées de votre application d’interopérabilité WPF.

Régions

Dans une fenêtre de niveau supérieur, vous pouvez conceptualiser que chaque HWND avec l’une des technologies d’une application d’interopérabilité dispose de sa propre région (également appelée espace de rendu, ou « airspace » en anglais). Chaque pixel de la fenêtre appartient à un seul HWND, qui constitue la région de ce HWND. (Strictement parlant, il existe plusieurs régions WPF s’il existe plusieurs HWND WPF, mais à des fins de cette discussion, vous pouvez supposer qu’il n’y en a qu’une seule). Le concept de région implique que toutes les couches ou autres fenêtres qui tentent d’effectuer un rendu par-dessus ce pixel pendant la durée de vie de l’application doivent utiliser la même technologie de niveau de rendu. La tentative d’affichage des pixels WPF sur Win32 entraîne des résultats indésirables et n’est pas autorisée autant que possible par le biais des API d’interopérabilité.

Exemples de régions

L’illustration suivante montre une application qui combine Win32, DirectX et WPF. Chaque technologie utilise son propre jeu distinct de pixels, sans chevauchement, ce qui évite les problèmes entre les régions.

Exemple d’application qui combine Win32, DirectX et WPF.

Supposez que cette application utilise la position du pointeur de la souris pour créer une animation qui tente de s’afficher sur l’une de ces trois régions. Quelle que soit la technologie responsable de l’animation proprement dite, cette technologie donne lieu à une violation des deux autres régions. L’illustration suivante montre une tentative de rendu d’un cercle WPF sur une région Win32.

Tentative d’affichage d’un cercle WPF sur une région Win32.

Si vous essayez d’utiliser la transparence ou simulation de transparence entre des technologies différentes, cela constitue également une violation. Dans l’illustration suivante, la zone WPF enfreint les régions Win32 et DirectX. Étant donné que les pixels de cette zone WPF sont semi-transparents, ils doivent être détenus conjointement par DirectX et WPF, ce qui n’est pas possible. Cela constitue donc une autre violation, le rendu ne peut pas être effectué.

Diagramme montrant une zone WPF qui enfreint les régions Win32 et DirectX.

Les trois exemples précédents ont utilisé des régions rectangulaires, mais des formes différentes sont possibles. Par exemple, une région peut présenter un espace. L’illustration suivante montre une région Win32 avec un trou rectangulaire, c’est la taille des régions WPF et DirectX combinées.

Diagramme montrant une région Win32 avec un trou rectangulaire.

Les régions peuvent également être complètement non irrécupérables ou toute forme décriable par un HRGN Win32 (région).

Diagramme montrant une région nonrectangulaire.

Transparence et fenêtres de niveau supérieur

Le gestionnaire de fenêtres dans Windows traite uniquement les disques HWND Win32. Par conséquent, chaque WPF Window est un HWND. Le Window HWND doit respecter les règles générales de tout HWND. Dans ce HWND, le code WPF peut prendre en charge les API WPF globales. Toutefois, pour les interactions avec d’autres HWND sur le bureau, WPF doit respecter les règles de traitement et de rendu Win32. WPF prend en charge les fenêtres non rectangulaires à l’aide des API Win32 : LES HRGN pour les fenêtres non rectangulaires et les fenêtres superposées pour un alpha par pixel.

Les clés de couleur et les valeurs alpha constantes ne sont pas prises en charge. Les fonctionnalités de fenêtre en couches Win32 varient selon la plateforme.

Les fenêtres superposées peuvent rendre toute la fenêtre translucide (semi-transparente) en spécifiant une valeur alpha à appliquer à chaque pixel de la fenêtre. (Win32 prend en charge en fait l’alpha par pixel, mais il est très difficile d’utiliser dans les programmes pratiques, car dans ce mode, vous devrez dessiner vous-même un HWND enfant, y compris des boîtes de dialogue et des listes déroulantes).

WPF prend en charge les HRGN ; toutefois, il n’existe aucune API managée pour cette fonctionnalité. Vous pouvez utiliser l’appel de plateforme et HwndSource appeler les API Win32 appropriées. Pour plus d’informations, consultez Appel à des fonctions natives à partir de code managé.

Les fenêtres en couches WPF ont des fonctionnalités différentes sur différents systèmes d’exploitation. Cela est dû au fait que WPF utilise DirectX pour afficher et que les fenêtres en couches ont été conçues principalement pour le rendu GDI, et non pour le rendu DirectX.

  • WPF prend en charge les fenêtres en couches accélérées matérielles.

  • WPF ne prend pas en charge les clés de couleur de transparence, car WPF ne peut pas garantir le rendu exact de la couleur demandée, en particulier lorsque le rendu est accéléré par le matériel.

Pour plus d’informations sur les limitations des régions d’interopérabilité, consultez HWNDs dans WPF.

Voir aussi