Estamos desarrollando un administrador de diseño en WPF que tiene ventanas gráficas que un usuario puede mover/cambiar de tamaño/etc. Las ventanas gráficas normalmente están llenas de datos (imágenes/películas/etc.) a través de proveedores que están bajo nuestro control en el administrador de diseño. Mi trabajo es examinar si también es posible alojar cualquier aplicación externa de Windows (por ejemplo, bloc de notas, calc, adobe reader, etc.) en una ventana gráfica. Me encuentro con una serie de problemas.Aplicación externa de alojamiento en la ventana de WPF
La mayoría de los recursos apuntan a utilizar la clase HwndHost. Estoy experimentando con este tutorial de la propia Microsoft: http://msdn.microsoft.com/en-us/library/ms752055.aspx
He adaptado esto para que el cuadro de lista se reemplace con el controlador de Windows desde la aplicación externa. Alguien me puede ayudar con estas preguntas:
- El tutorial añade una ventana sub estática adicional en el que se coloca el
ListBox
. No creo que necesite eso para aplicaciones externas. Si lo hago, tengo que hacer que la aplicación externa sea una ventana secundaria (usando Get/SetWindowLong de user32.dll para establecerGWL_STYLE
comoWS_CHILD
). Pero si hago eso, la barra de menú de la aplicación desaparece (debido al estiloWS_CHILD
) y ya no recibe ninguna entrada. - Si utilizo la ventana secundaria y hago que la aplicación externa sea hija de que todo funciona de manera razonable, pero a veces la aplicación externa no se ve bien.
- Además, necesito la ventana secundaria para cambiar el tamaño de la ventana gráfica. es posible?
- Cuando la aplicación exernal genera una ventana secundaria (es decir, Bloc de notas-> Ayuda-> Acerca de), esta ventana no está alojada en el
HwndHost
(y, por lo tanto, se puede mover fuera de la ventana gráfica). ¿Hay alguna manera de prevenir eso? - Como no necesito más interacción entre la aplicación externa y el administrador de diseño, ¿estoy en lo cierto al asumir que no necesito capturar y reenviar mensajes? (el tutorial agrega un HwndSourceHook a la ventana secundaria para detectar cambios de selección en el cuadro de lista).
- Cuando ejecuta el ejemplo (no modificado) VS2010 y cierra la ventana, VS2010 no ve que el programa finalizó. Si te rompes todo, terminas ensamblado sin fuente. Algo mal está sucediendo, pero no puedo encontrarlo.
- El tutorial en sí parece tener un código muy descuidado, pero no he encontrado ninguna documentación mejor sobre este tema. ¿Algún otro ejemplo?
- Otro enfoque es no usar
HwndHost
sinoWindowsFormHost
como se describe en here. Funciona (¡y es mucho más simple!) Pero no tengo control sobre el tamaño de la aplicación. Además, WinFormHost no es realmente para esto?
Gracias por cualquier apunta en la dirección correcta.
Hola, cabe duda de que para el punto 8. –