Rebar через win api - что поменялось в win 7/10/11?

Все примеры с Rebar, которые я смог найти:

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\winui\controls\common\rebar

MS_2020, MS_2024, git, ещё git, stackoverflow

Работают только если добавить:

#define _WIN32_WINNT _WIN32_WINNT_WINXP

Если указать _WIN32_WINNT_WIN7 или _WIN32_WINNT_WIN10 то вместо Rebar отображается узкая полоска.

Что нужно исправить / добавить чтобы примеры заработали в современных windows?

Или покажите работающий пример.


Ответы (1 шт):

Автор решения: mur

Нашёл, что проблему можно решить добавлением манифеста и это сработало:

Comctl32.dll версия 6 не распространяется, но она включена в Windows. Чтобы использовать Comctl32.dll версию 6, укажите ее в манифесте. Дополнительные сведения о манифестах см. в разделе Включение визуальных стилей.

Причём нашёл это предупреждение на странице про Toolbar, который хоть и не "стильно", но работает без манифеста, а там где пишут про Rebar (который без манифеста совсем не отображается) везде про это тишина.

Вот пример минимального манифеста, который делает упомянутые в вопросе примеры Rebar рабочими в современных windows без ограничения до ..._WINXP

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="CompanyName.ProductName.YourApplication"
    type="win32"
/>
    
<description>Your application description here.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>

</assembly>

Он и отвечает на вопрос что изменилось в win 7/10/11 и нарушило работу примеров Rebar.

PS: Ещё нашёлся забавный набор примеров, где даже есть попытка настроить манифест, но и там работают все CommonControls... кроме Rebar, и даже тамошний вариант манифеста не помог.

→ Ссылка