Probablemente recuerde cuando Windows XP llegó con un aspecto nuevo y fresco, y podría volver a la apariencia clásica de Windows 95/2000, o podría cambiar el tema del color. Eso se llamó visual styles, lo que trajo a Windows un mejor soporte de tematización.
![Classic, Luna, Aero and Metro](https://i.stack.imgur.com/FvcZ9.png)
estilos visuales remained as a feature desde entonces. Windows Vista y 7 introdujeron Aero, pero aún así permitieron usar el tema clásico.Windows 8 eliminó Aero y el tema clásico, y agregó el tema de Metro. Los temas de alto contraste ahora forman parte de los estilos visuales y ya no tienen el aspecto clásico.
Por lo tanto, una aplicación temática clásica en Windows 7 cuando se esperaba un estilo Aero, es un problema con el estilo visual de la aplicación. No estoy seguro de por qué, pero Microsoft no dejó el viejo tema clásico como opcional mientras migraba la API al nuevo aspecto.
Entonces, ¿cómo aplico el estilo moderno?
![enter image description here](https://i.stack.imgur.com/aGhlR.png)
De cualquier manera this MSDN article explica cómo habilitar los estilos visuales para su aplicación. He visto gente diciendo que habilitar Unicode (que define UNICODE
) lo haría, pero es no es necesario. Básicamente, solo necesita escribir un archivo de manifiesto que especifique la versión 6 de la DLL de controles comunes como requisito, luego incrustarlo como un recurso o colocarlo en appname.exe.manifest
en el directorio del ejecutable. Un manifiesto de la muestra se vería así:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*"
name="CompanyName.ProductName.YourApplication" type="win32"/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Windows.Common-Controls"
version="6.0.0.0" type="win32" processorArchitecture="*"
publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
</assembly>
Si vas por la opción de inserción, no se olvide de tener winuser.h
incluidos en el archivo de recursos. También es posible que inicializar los controles DLL común en su WinMain
, según this MinGW guide:
que he visto este paso se perdió en algunos ejemplos, y puede causar algunos comportamientos extraños en determinadas versiones del sistema operativo y cierta condiciones, como botones invisibles o diálogos que no se pueden crear. mucho por la rápida respuesta
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(icc);
icc.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&icc);
Gracias! Ahora, mi aplicación se ve exactamente como quiero. –