Interoperabilidad de WPF: Información general sobre "Espacio aéreo" y regiones de ventana

Actualización: noviembre 2007

El "espacio aéreo" es una manera conceptual de pensar en la manera de compartir las áreas de representación contenidas en una ventana de nivel superior entre las dos mitades de una aplicación de interacción. En este tema se explica cómo puede influir este concepto de "espacio aéreo" en el diseño de presentación, y se describen las consideraciones de entrada de la aplicación de interacción de WPF.

Espacio aéreo

Dentro de una ventana de nivel superior, puede interpretarse que cada HWND que incluye una de las tecnologías de una aplicación de interacción tiene su propio "espacio aéreo". Cada píxel de la ventana pertenece exactamente a un HWND, que constituye el espacio aéreo de ese HWND. (En rigor, hay más de un espacio aéreo de WPF si hay más de un HWND de WPF, pero para explicar el concepto supondremos que hay uno solo en los ejemplos de este tema). El concepto de espacio aéreo 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. Si se intenta representar píxeles de WPF sobre Win32 da lugar a los resultados no deseados y se impide en la medida de lo posible mediante las API de interacción.

Ejemplos de espacio aéreo

En el primer ejemplo se muestra una aplicación que combina Win32, DirectX y WPF. Cada tecnología utiliza su propio conjunto de píxeles independientes no superpuestos y no hay ningún problema de espacio aéreo.

Ventana que no tiene problemas de espacio aéreo

Sin embargo, supongamos que, partiendo de esa aplicación, se crea una animación controlada por la posición del puntero del mouse, que puede intentar representarse sobre cualquiera de estas tres regiones. En algún punto, se invadiría el espacio aéreo. Independientemente de cuál fuese la tecnología sea responsable de la animación propiamente dicha, esa tecnología invadiría el espacio aéreo de las otras dos. Esto se muestra en la imagen siguiente, donde el círculo verde intenta moverse por la ventana:

Diagrama de interoperabilidad

Otra invasión del espacio aéreo consiste en intentar usar la transparencia/mezcla alfa entre distintas tecnologías. En la imagen siguiente, el cuadro de WPF invade el espacio aéreo de Win32 y DirectX. Puesto que los píxeles de ese cuadro de WPF son semitransparentes, deberían ser propiedad conjuntamente de DirectX y de WPF, lo que no es posible. Así pues, se trata de otra invasión del espacio aéreo y no se puede generar:

Diagrama de interoperabilidad

En los tres ejemplos anteriores se han utilizado zonas rectangulares, pero el espacio aéreo no es necesariamente rectangular. Puede ser un rectángulo con un hueco (por ejemplo, el espacio aéreo de Win32 aquí es todo excepto el espacio aéreo de WPF y DirectX):

Diagrama de interoperabilidad

Los espacios aéreos también pueden ser completamente no rectangulares, o adoptar cualquier forma que pueda describirse mediante un identificador de zona (HRGN) de Win32:

Diagrama de interoperabilidad

Transparencia y ventanas de nivel superior

El proceso del administrador de ventanas (en Windows Vista y Microsoft Windows XP), en realidad, sólo procesa indicadores HWND de Win32; por consiguiente, 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 la ventana completa 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 utilizar en programas prácticos, porque en este modo debería dibujar manualmente cada HWND secundario, incluidos los cuadros de diálogo y los cuadros desplegables).

WPF admite los HRGN; sin embargo, no hay API administradas para esta funcionalidad. Puede utilizar la invocación de plataforma y HwndSource para llamar a las API pertinentes de Win32. Para obtener más información, vea Llamar a funciones nativas desde código administrado

Las ventanas superpuestas de WPF tienen distintas funciones en cada sistema operativo (esto se debe a que WPF utiliza DirectX para la representación y las ventanas superpuestas se han diseñado sobre todo para la representación de GDI, no la de DirectX):

  • WPF admite ventanas superpuestas con aceleración de hardware en Windows Vista. Las ventanas superpuestas con aceleración de hardware de Microsoft Windows XP requiere compatibilidad con Microsoft DirectX, por lo que las funciones dependerán de la versión de Microsoft DirectX que haya en ese equipo.

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

  • Si se ejecutan en Microsoft Windows XP, las ventanas superpuestas situadas sobre superficies de DirectX parpadean cuando se representa la aplicación de DirectX. (La secuencia de representación real consiste en que Interfaz de dispositivo gráfico de Microsoft Windows (GDI) oculta la ventana superpuesta, DirectX dibuja y, a continuación, Interfaz de dispositivo gráfico de Microsoft Windows (GDI) vuelve a colocar la ventana superpuesta). Las ventanas superpuestas que no son de WPF también tienen esta limitación.

Vea también

Tareas

Tutorial: Crear una aplicación de Win32 que incluya contenido de WPF

Tutorial: Crear una aplicación de WPF que incluya contenido de Win32

Conceptos

Información general sobre la interoperabilidad de WPF y Win32