ventana - Programación en C+Win API: cómo obtener Windows 7 ¿Buscar controles?
programacion android pdf 2018 (3)
Así es como los controles miraron hacia atrás en la década de 1990, antes de que se inventaran los temas (estilos visuales). Como habrás notado, los botones modernos ahora están pintados con pantalones de fantasía con degradados y palpitantes y todo eso. Sin embargo, por razones de compatibilidad con versiones anteriores, debe solicitar específicamente que sus controles reciban ese tratamiento, o volverán al estilo tradicional.
Lo haces especificando un manifiesto. Puede agregar uno en formato de texto sin formato al directorio raíz de su aplicación, o puede hacer que Visual Studio (2005 y posterior) incruste automáticamente uno en su EXE.
La segunda ruta es la forma en que iría. Agregue el siguiente código a su archivo stdafx.h
para informarle al compilador que desea que agregue el manifiesto automáticamente al construir su proyecto:
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:/"type=''win32'' name=''Microsoft.Windows.Common-Controls'' version=''6.0.0.0'' processorArchitecture=''x86'' publicKeyToken=''6595b64144ccf1df'' language=''*''/"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:/"type=''win32'' name=''Microsoft.Windows.Common-Controls'' version=''6.0.0.0'' processorArchitecture=''ia64'' publicKeyToken=''6595b64144ccf1df'' language=''*''/"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:/"type=''win32'' name=''Microsoft.Windows.Common-Controls'' version=''6.0.0.0'' processorArchitecture=''amd64'' publicKeyToken=''6595b64144ccf1df'' language=''*''/"")
#else
#pragma comment(linker,"/manifestdependency:/"type=''win32'' name=''Microsoft.Windows.Common-Controls'' version=''6.0.0.0'' processorArchitecture=''*'' publicKeyToken=''6595b64144ccf1df'' language=''*''/"")
#endif
Este artículo de MSDN tiene más información sobre estilos visuales de la que podrías desear.
Y si realmente desea que su aplicación se vea como nativa, debe cambiar el pincel de fondo utilizado para la ventana principal. De manera predeterminada, está configurado para usar el mismo color que el fondo de un cuadro de texto (blanco).
En su lugar, desea utilizar el color utilizado para pintar controles 3D. Modifique el miembro hbrBackground
de su estructura WNDCLASS
(o WNDCLASSEX
) como se muestra aquí:
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
¿Por qué tienes que agregar 1? Por razones de compatibilidad con versiones anteriores, de nuevo. Los detalles son aburridos. :-)
Estoy programando estrictamente en C y WinAPI, sin C ++ o C #. Soy un principiante y solo estoy aprendiendo a dibujar controles, etc. La cosa es que cuando creo Windows u otros controles como los Botones de comando, tienen aspecto nativo de Windows. Mira esto:
Pero en Windows 7, los botones de comando se ven así:
Ahora, ¿cómo obtengo los botones de comando en mi programa para que se vean así? ¿Es posible? Estoy siguiendo este tutorial, para referencia: http://zetcode.com/gui/winapi/
Gracias.
Habilita estilos visuales para su aplicación al proporcionar un manifiesto XML, ya sea como un archivo separado o como un recurso incrustado. Consulte Habilitación de estilos visuales para más detalles.
Probablemente recuerde cuándo llegó Windows XP con ese aspecto nuevo y fresco, y podría revertirlo a la apariencia clásica de Windows 95/2000, o podría cambiar el tema del color. Eso se llamó estilos visuales , lo que trajo a Windows un mejor soporte de tematización.
Los estilos visuales se mantuvieron como una característica 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?
De cualquier manera, este artículo de MSDN explica cómo habilitar estilos visuales para su aplicación. He visto gente que dice que habilitar Unicode (que define UNICODE
) lo haría, pero no es obligatorio. Básicamente, solo necesita escribir un archivo de manifiesto que especifique la versión 6 de la DLL de controles comunes como requisito, luego appname.exe.manifest
como un recurso o lugar en appname.exe.manifest
en el directorio del ejecutable. Un manifiesto de 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 winuser.h
la opción de winuser.h
, no olvide incluir winuser.h
en su archivo de recursos. Es posible que también desee inicializar la DLL de controles comunes en su WinMain
, de acuerdo con esta guía MinGW :
He visto este paso omitido en algunos ejemplos, y puede causar comportamientos extraños bajo ciertas versiones del sistema operativo y ciertas condiciones, como botones que son invisibles o diálogos que no se pueden crear.
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(icc);
icc.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&icc);