Frage

Nach dem docs :

„Wenn Sie Ihre Anwendung ComCtl32.dll Version 6 zu verwenden, müssen Sie einen Antrag Manifest hinzufügen oder Compiler-Direktive , um festzulegen, dass Version 6 sollte verwendet werden, wenn es verfügbar ist.“

Beachten Sie die logische ODER oben? Also, was ist diese mysteriöse Compiler-Direktive?

Ich habe eine native Win32 C ++ Anwendung, die vollständig in einer einzigen CPP-Datei enthalten ist. Es sind keine Ressourcendateien, Manifest-Dateien etc. würde ich es auf diese Weise halten mögen, aber ich mag auch visuelle Stile verwenden.

War es hilfreich?

Lösung

Wenn Sie Visual Studio verwenden, können Sie diese Zeile in stdafx.cpp beispielsweise hinzufügen:

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

Andere Tipps

Es gibt tatsächlich einen dritten Weg mit keine Manifeste auch immer , obwohl es ziemlich 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;
}

Wenn Sie Lesung gehalten hätte, hätte Sie gefunden haben, die Antwort :

  

Wenn Sie mit Microsoft Visual C ++ 2005 oder höher können Sie die folgende Compiler-Direktive zu Ihrem Quellcode einfügen, anstatt manuell ein Manifest zu schaffen. Zur besseren Lesbarkeit wird die Richtlinie in zwei Zeilen unterteilt hier.

#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' 
version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top