2011-01-03 3 views

Antwort

10

Sie müssen eine Manifestdatei in die ausführbare Datei einbetten, die Windows mitteilt, dass Sie die Version der Steuerelemente mit aktivierten Themen benötigen (there's MSDN documentation specifically for this topic). Dies ist wirklich aus Kompatibilitätsgründen, weil some people really like to write programs that mess around with the internal data structures of other programs.

in Visual C++, wahrscheinlich der einfachste Weg, dies zu tun ist über eine #pragma:

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

Dieser den Linker verursacht, so etwas zu der generierten Manifest-Datei hinzufügen:

<dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.0.0" 
      processorArchitecture="*" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" /> 
    </dependentAssembly> 
</dependency> 

Sie müssen Sie auch InitCommonControlsEx() aufrufen, um die entsprechenden Steuerelementklassen zu registrieren, oder das Dialogfeld wird nicht angezeigt.

Wie Mark Ransom in den Kommentaren erwähnt, Windows 2000 ignores theming manifests, so sollte dies noch in Windows 2000, Windows XP und später funktionieren. Außerdem definieren einige Frameworks wie MFC #pragma und führen die Initialisierung für Sie durch.

+0

Wird die Abhängigkeit von der Version "6.0.0.0" im Manifest-Break unter Windows 2000 hinzugefügt? –

+0

Ich finde, dass das alles für mich getan wird, wenn ich ein neues MFC-Projekt erstelle. Die '# Pragma' sind in' stdafx.h' und die 'InitCommonControlsEx' in' InitInstance'. –

+2

Manifeste werden von Windows 2000 ignoriert, Sie müssen also nur die richtigen Initialisierungsaufrufe ausführen. http://msdn.microsoft.com/en-us/library/ff563660%28v=vs.85%29.aspx –

Verwandte Themen