Вам необходимо встроить файл манифеста в исполняемый файл, который сообщает Windows, что вы хотите версию элементов управления с включенными темами ( есть документация MSDN специально для этой темы ).Это действительно из соображений совместимости, потому что некоторым людям действительно нравится писать программы, которые связываются с внутренними структурами данных других программ .
В Visual C ++, вероятно, самый простой способ сделать эточерез #pragma
:
#pragma comment(linker,"/manifestdependency:\"" \
"type='win32' " \
"name='Microsoft.Windows.Common-Controls' " \
"version='6.0.0.0' " \
"processorArchitecture='*' " \
"publicKeyToken='6595b64144ccf1df' " \
"language='*'\"")
Это заставит компоновщик добавить что-то подобное в сгенерированный файл манифеста:
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
Вам также нужно вызвать InitCommonControlsEx()
для регистрации соответствующих классов элементов управления, иначе диалоговое окно не появится.
Как отметил Марк Рэнсом в комментариях ниже, Windows 2000 игнорирует манифесты тем оформления , так что это должнопо-прежнему работают в Windows 2000, Windows XP и более поздних версиях.Кроме того, некоторые платформы, такие как MFC, определяют #pragma
и выполняют инициализацию за вас.