Información general sobre áreas de la tecnología

Si se usan varias tecnologías de representación en una aplicación, como WPF, Win32 o DirectX, deben compartir las áreas de representación en una ventana común de nivel superior. En este tema se describen los problemas que podrían afectar a la presentación y la entrada de una aplicación de interoperación WPF.

Regions

Dentro de una ventana de nivel superior, puede interpretarse que cada HWND que incluye una de las tecnologías de una aplicación de interoperación tiene su propia región (conocida también como "espacio aéreo"). Cada píxel de la ventana pertenece exactamente a un HWND, que constituye la región de ese HWND. (En realidad, hay más de una región de WPF si hay más de un HWND de WPF, pero para los propósitos de este tutorial, puede suponer que solo hay una). La región implica que todas las capas u otras ventanas que intentan representarse sobre ese píxel durante la duración de la aplicación deben formar parte de la misma tecnología de nivel de representación. El intento de representar píxeles de WPF sobre Win32 da lugar a resultados no deseados y se impide en la medida de lo posible mediante las API de interacción.

Ejemplos de región

En la ilustración siguiente se muestra una aplicación que mezcla Win32, DirectX y WPF. Cada tecnología usa su propio conjunto de píxeles independientes no superpuestos y no hay ningún problema con la región.

Ejemplo de una aplicación que combina Win32, DirectX y WPF.

Suponga que esta aplicación usa la posición del puntero del mouse para crear una animación que se intenta representar sobre cualquiera de estas tres regiones. Independientemente de cuál fuese la tecnología responsable de la animación propiamente dicha, esa tecnología invadiría la región de las otras dos. En la ilustración siguiente se muestra un intento de representar un círculo de WPF sobre una región de Win32.

Un intento de representar un círculo de WPF en una región Win32.

Otra infracción consiste en intentar usar la transparencia/combinación alfa entre distintas tecnologías. En la ilustración siguiente, el cuadro de WPF invade las regiones de Win32 y DirectX. Como los píxeles de ese cuadro de WPF son semitransparentes, deberían ser propiedad conjunta de DirectX y WPF, lo que no es posible. Por tanto, es otra infracción y no se puede generar.

Diagrama que muestra un cuadro de WPF que infringe las regiones Win32 y DirectX.

En los tres ejemplos anteriores se usaban regiones rectangulares, pero es posible usar formas diferentes. Por ejemplo, una región puede tener un hueco. En la siguiente ilustración se muestra una región de Win32 con un hueco rectangular del tamaño de las regiones de WPF y DirectX combinadas.

Diagrama que muestra una región Win32 con un agujero rectangular.

Las regiones también pueden adoptar cualquier forma no rectangular, o cualquier forma que pueda describirse mediante un HRGN de Win32 (región).

Diagrama que muestra una región no rectangular.

Transparencia y ventanas de nivel superior

El administrador de ventanas de Windows realmente solo procesa los HWND de Win32. Por tanto, cada Window de WPF es un HWND. El HWND Window debe cumplir las reglas generales para todos los HWND. Dentro de ese HWND, el código de WPF puede hacer cualquier cosa que admitan las API de WPF en general. Pero para las interacciones con otros HWND en el escritorio, WPF debe cumplir las reglas de procesamiento y representación de Win32. WPF admite ventanas no rectangulares mediante API de Win32: HRGN para las ventanas no rectangulares y ventanas superpuestas para un alfa por píxel.

No se admiten los valores de alfa ni las claves de color constantes. Las capacidades de las ventanas superpuestas de Win32 varían según la plataforma.

Las ventanas superpuestas pueden hacer que toda la ventana sea translúcida (semitransparente) especificando un valor de alfa que se aplique a todos los píxeles de la ventana. (De hecho, Win32 admite el valor alfa por píxel, pero se trata de algo muy complicado de usar en programas prácticos, porque en este modo se debería dibujar manualmente cada HWND secundario, incluidos los cuadros de diálogo y los cuadros desplegables).

WPF admite los HRGN, pero no hay API administradas para esta funcionalidad. Se puede usar la invocación de plataforma y HwndSource para llamar a las API pertinentes de Win32. Para más información, vea Llamar a funciones nativas desde código administrado.

Las ventanas superpuestas de WPF tienen características diferentes según el sistema operativo. Esto se debe a que WPF usa DirectX para la representación y las ventanas superpuestas se han diseñado principalmente para la representación de GDI, no la de DirectX.

  • WPF admite ventanas superpuestas con aceleración de hardware.

  • WPF no admite las claves de color de transparencia, porque WPF no puede garantizar que se represente exactamente el color que se solicita, en particular cuando se aplica la aceleración de hardware a la representación.

Vea también