Question

Selon le docs :

« Si vous voulez que votre application à utiliser la version 6 ComCtl32.dll, vous devez ajouter un manifeste d'application ou directive compilateur pour indiquer que la version 6 doit être utilisée si elle est disponible. »

Notez que le OU logique ci-dessus? Alors, quelle est cette mystérieuse directive du compilateur?

J'ai une application ++ Win32 natif C qui est entièrement contenu dans un seul fichier .cpp. Il n'y a pas les fichiers de ressources, fichiers manifestes, etc. Je voudrais garder cette façon, mais je voudrais aussi utiliser des styles visuels.

Était-ce utile?

La solution

Si vous utilisez Visual Studio, vous pouvez ajouter cette ligne à votre stdafx.cpp par exemple:

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

Autres conseils

Il est en fait une troisième voie avec pas que ce soit manifeste , mais il est plutôt aki:

#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 vous aviez gardé la lecture, vous auriez trouvé la réponse :

  

Si vous utilisez Microsoft Visual C ++ 2005 ou plus tard, vous pouvez ajouter la directive du compilateur suivant à votre code source au lieu de créer manuellement un manifeste. Pour faciliter la lecture, la directive est divisée en deux lignes ici.

#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' 
version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top