Pregunta

Estoy desarrollando un control ActiveX, que (en estos días) se utiliza sobre todo en aplicaciones Windows Forms.

El control ActiveX tiene un diálogo de página de propiedad ', que se puede mostrar programación utilizando el método ShowPropertyPages en la clase AxHost. Esta es la interfaz de usuario personalizada que puede ser criado en Visual Studio para editar las propiedades de un control.

Este diálogo página de propiedades contiene un control ListBox que utiliza un ImageList para mostrar iconos junto a elementos de lista. Estos iconos son mapas de bits alfa-mezclado de 32 bits. A fin de que éstos se muestre correctamente, la versión 6.0 o por encima de COMCTL32.DLL debe ser utilizado.

Desafortunadamente cuando corro mi aplicación WinForms, se carga y utiliza la versión COMCTL32.DLL 5.xxx . Como resultado, cuando se muestra el diálogo de página de propiedades de los iconos se ven mal (las áreas semitransparentes se dibujan en negro sólido).

Mi pregunta es: ¿hay alguna manera de asegurarse de utilizar la versión 6.0 o superior COMCTL32.dll desde dentro de la página de propiedades de la interfaz de usuario del control ActiveX, independientemente de lo que el proceso está utilizando? O puedo forzar el proceso de host para utilizar la versión 6.0? (Creo que no, porque estoy pensando el proceso de host posible que ya han cargado en la memoria antes COMCTL32.DLL cualquier parte del código en el control ActiveX.

Esta página web cubre algunos escenarios para el uso de COMCTL32 6.0 , pero no la situación que estoy.

¿Fue útil?

Solución

El artículo original de MSDN me estaba confundiendo porque se centró en una serie de escenarios específicos, ninguno de los cuales coinciden con los míos. De hecho, la tecnología subyacente que está hablando de obras en general.

añadiendo un recurso 'manifiesto' archivo XML para la DLL de ActiveX, que puede ser señal de que el sistema de lado a lado que yo quiero esa DLL para utilizar COMCTL32.DLL 6.x Esa versión se carga automáticamente. Bastante agradable.

Este manifiesto tiene que ser del tipo de recurso RT_MANIFEST , con un identificador de recurso de 2 .

Aquí está la evidencia de éxito (dos versiones de un mismo archivo DLL cargado en el mismo proceso!): procexp captura de pantalla que muestra dos de carga en el proceso de COMCTL32

(también, los iconos se muestran correctamente en el cuadro de lista ;) )

Otros consejos

Si su aplicación llama Application.EnableVisualStyles () (normalmente antes de llamar Application.Run () para iniciar un bucle de mensajes), entonces la versión 6+ de los controles comunes de la biblioteca debe ser utilizado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top