Pregunta

De acuerdo con la docs :

"Si usted quiere que su aplicación utilice ComCtl32.dll versión 6, debe agregar un manifiesto de aplicación o compilador Directiva para especificar que la versión 6 se debe utilizar si está disponible."

Aviso el OR lógico de arriba? Entonces, ¿qué es esto directiva del compilador misteriosa?

Tengo una aplicación nativa de Win32 C ++ que es totalmente contenida en un solo archivo .cpp. No hay archivos de recursos, archivos de manifiesto, etc. Me gustaría que siga siendo así, pero también me gustaría usar estilos visuales.

¿Fue útil?

Solución

Si está utilizando Visual Studio, se puede añadir esta línea a su stdafx.cpp por ejemplo:

#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

Otros consejos

De hecho, hay una tercera vía con no se manifiesta en absoluto , aunque es bastante hacky:

#include <windows.h>

// NOTE: It is recommended that you delay-load ComCtl32.dll (/DelayLoad:ComCtl32.dll)
// and that you ensure this code runs before GUI components are loaded.
// Otherwise, you may get weird issues, like black backgrounds in icons in image lists.
ULONG_PTR EnableVisualStyles(VOID)
{
    TCHAR dir[MAX_PATH];
    ULONG_PTR ulpActivationCookie = FALSE;
    ACTCTX actCtx =
    {
        sizeof(actCtx),
        ACTCTX_FLAG_RESOURCE_NAME_VALID
            | ACTCTX_FLAG_SET_PROCESS_DEFAULT
            | ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID,
        TEXT("shell32.dll"), 0, 0, dir, (LPCTSTR)124
    };
    UINT cch = GetSystemDirectory(dir, sizeof(dir) / sizeof(*dir));
    if (cch >= sizeof(dir) / sizeof(*dir)) { return FALSE; /*shouldn't happen*/ }
    dir[cch] = TEXT('\0');
    ActivateActCtx(CreateActCtx(&actCtx), &ulpActivationCookie);
    return ulpActivationCookie;
}

Si se hubiera mantenido la lectura, se habría encontrado la respuesta :

  

Si está utilizando Microsoft Visual C ++ 2005 o posterior, se puede añadir la siguiente directiva de compilación de código fuente en lugar de crear manualmente un manifiesto. Para facilitar la lectura, la directiva se divide en dos líneas aquí.

#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' 
version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top