How to enable visual styles without a manifest

前端 未结 3 1057
青春惊慌失措
青春惊慌失措 2020-12-01 13:29

According to the docs:

\"If you want your application to use ComCtl32.dll version 6, you must add an application manifest or compiler directive

相关标签:
3条回答
  • 2020-12-01 13:36

    If you're using Visual Studio, you can add this line to your stdafx.cpp for example:

    #pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    
    0 讨论(0)
  • 2020-12-01 13:38

    There's actually a third way with no manifests whatsoever, though it's rather 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;
    }
    
    0 讨论(0)
  • 2020-12-01 13:53

    If you had kept reading, you would have found the answer:

    If you are using Microsoft Visual C++ 2005 or later, you can add the following compiler directive to your source code instead of manually creating a manifest. For readability, the directive is broken into two lines here.

    #pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' 
    version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    
    0 讨论(0)
提交回复
热议问题