Ha habido discusiones en Internet sobre la implementación del estilo XP a través de la programación durante mucho tiempo, pero no existe una solución perfecta para implementar el estilo XP a través de la programación VB. El autor finalmente reveló el secreto a través de N días y noches de arduo estudio. Lo siguiente se divide en tres aspectos para compartir con usted.
Haga clic para descargar el archivo de código fuente
uno. Usar archivos de manifiesto para lograr el estilo XP
En circunstancias normales, en los sistemas Windows XP, sólo la barra de título de la ventana de una aplicación desarrollada con VB6 tiene el estilo XP, y los botones, cuadros de texto y otros controles del formulario todavía muestran el estilo tradicional de Windows. Como se muestra en la Figura 1:
Al consultar el capítulo Estilo visual en MSDN, sabemos que Windows XP usa Comctl32.dll (versión 6) para cargar componentes con estilo XP, y la aplicación notifica al sistema que lo haga a través de un archivo de recursos XML. El contenido del archivo XML es el siguiente:
<?versión xml=codificación 1.0=UTF-8 independiente=sí?>
<ensamblado xmlns=urna:schemas-microsoft-com:asm.v1 manifestVersion=1.0>
<identidaddeensamblaje
nombre=manifiesto de estilo XP
arquitectura del procesador = x86
versión = 1.0.0.0
tipo=win32/>
<dependencia>
<Asamblea dependiente>
<ensamblajeIdentidad
tipo = win32
nombre=Microsoft.Windows.Common-Controls
versión = 6.0.0.0
arquitectura del procesador = x86
token de clave pública = 6595b64144ccf1df
idioma=*
/>
</Asamblea dependiente>
</dependencia>
</ensamblaje>
Suponga que el nombre de su programa compilado final es abc.exe y el directorio de trabajo es d:/vbxp. Copie el contenido XML anterior y guárdelo como un archivo de texto. Luego cambie el nombre del archivo abc.exe.manifest (tenga en cuenta que se debe eliminar la extensión .txt). En el programa VB, necesitamos llamar a la función InitCommonControlsEx para inicializar la clase de componente de comctl32.dll (versión 6) antes de que se carguen todos los formularios. La función API InitCommonControlsEx y las constantes y tipos de datos relacionados se declaran de la siguiente manera:
Función de declaración privada InitCommonControlsEx Lib comctl32.dll _
(iccex como tagInitCommonControlsEx) como booleano
Etiqueta de tipo privadoInitCommonControlsEx
Tamaño largo siempre que sea largo
lngICC siempre y cuando
Tipo de extremo
Const privado ICC_USEREX_CLASSES = &H200
Aquí escribimos una función para encapsular la operación de inicialización:
Función pública InitCommonControlsVB() como booleana
En caso de error Continuar siguiente
Dim iccex como etiquetaInitCommonControlsEx
con iccex
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
Terminar con
InitCommonControlsEx iccex
InitCommonControlsVB = (Número de error = 0)
En caso de error Ir a 0
Función final
Tenga en cuenta que la acción de inicialización debe completarse antes de cargar todos los formularios, por lo que las declaraciones relevantes deben colocarse en Sub Main () y el proyecto debe iniciarse desde Sub Main (). El código es el siguiente:
Subprincipal()
InitCommonControlsVB
Formulario1.Mostrar
Subtítulo final
En este punto, su abc.exe compilado tendrá estilo XP, como se muestra en la Figura 2: