Как получить визуальные темы в диалогах Win32, сгенерированных из файлов ресурсов? - PullRequest
4 голосов
/ 03 января 2011

У меня есть диалог, определенный в файле ресурсов.Тем не менее, он использует кнопки стиля Windows 95 и тому подобное.Как использовать визуальные темы (т.е. те, что были добавлены в XP и более поздние версии) для этих элементов управления?

1 Ответ

11 голосов
/ 03 января 2011

Вам необходимо встроить файл манифеста в исполняемый файл, который сообщает 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 и выполняют инициализацию за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...