Al utilizar la API de Windows, ¿cómo me aseguro de que los controles conserven una apariencia nativa?

StackOverflow https://stackoverflow.com/questions/111630

Pregunta

Algunos de los controles que he creado parecen tener por defecto el antiguo tema de Windows 95, ¿cómo puedo evitarlo?Aquí hay un ejemplo de un botón que no conserva la apariencia nativa del sistema operativo (estoy usando Vista como mi entorno de desarrollo):

HWND button = CreateWindowEx(NULL, L"BUTTON", L"OK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                  170, 340, 80, 25, hwnd, NULL, GetModuleHandle(NULL), NULL);

Estoy usando C++ nativo con la API de Windows, sin código administrado.

¿Fue útil?

Solución

Creo que no tiene nada que ver con tu código, pero necesitas configurar un manifiesto archivo para obtener los controles temáticos.

Alguna información aquí: @msdn.com y aquí: @blogs.msdn.com

Puede ver la diferencia entre solicitud con y sin manifiesto aquí: herramientascielo.com

Otros consejos

Para agregar un manifiesto a la aplicación, necesita crear un archivo MyApp.manifest y agregarlo al archivo de recursos de la aplicación:

//-- This define is normally part of the SDK but define it if this 
//-- is an older version of the SDK.
#ifndef RT_MANIFEST
#define RT_MANIFEST              24
#endif

//-- Add the MyApp XP Manifest file
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyApp.manifest"

Con versiones más nuevas de Estudio visual hay un Herramienta de manifiesto pestaña que se encuentra en la configuración del proyecto y la Archivos de manifiesto adicionales El campo que se encuentra en esta pestaña también se puede utilizar para definir el archivo de manifiesto.

Aquí hay un archivo MyApp.manifest simple para una aplicación Win32:

<?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.1"
    processorArchitecture="X86"
    name="Microsoft.Windows.MyApp"
    type="win32"
/>
<description>MyApp</description>
</assembly>

Si su aplicación depende de otros archivos DLL, estos detalles también se pueden agregar al manifiesto y Windows usará esta información para asegurarse de que su aplicación siempre use las versiones correctas de estos archivos DLL dependientes.

Por ejemplo, aquí están los detalles de dependencia del manifiesto para el control común y las bibliotecas de tiempo de ejecución de la versión 8.0 C:

<dependentAssembly>
    <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="X86"
        publicKeyToken="6595b64144ccf1df"
        language="*"
    />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity
        type="win32"
        name="Microsoft.VC80.CRT"
        version="8.0.50608.0"
        processorArchitecture="x86"
        publicKeyToken="1fc8b3b9a1e18e3b" />
</dependentAssembly>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top