Визуальные стили Win32 с обратной совместимостью?

Когда я встраиваю манифест визуальных стилей в мою программу следующим образом:

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

// Link common controls library
#pragma comment(lib, "ComCtl32.lib")

Означает ли это, что моя программа будет работать только на Windows XP? Или, если визуальные стили отсутствуют на компьютере, они будут использовать стиль операционной системы по умолчанию? Я спрашиваю, потому что я включил визуальные стили в своей программе, которую я разрабатываю с помощью Visual Studio 2008, и я хочу знать, на какой самой ранней версии Windows она может быть запущена. Должен ли я проверить WINVER чтобы увидеть, работают ли они версии, которая поддерживает визуальные стили? Если так, какой номер версии я должен проверить в препроцессоре. Еще одна вещь, которую я хотел бы знать: без визуальных стилей, какая самая низкая версия, на которой я могу запустить свою программу?

2 ответа

Решение

Означает ли это, что моя программа будет работать только на Windows XP? Или, если визуальные стили отсутствуют на компьютере, они будут использовать стиль операционной системы по умолчанию?

Последнее верно, и документация определяет точное поведение (акцент мой):

Если вы хотите, чтобы ваше приложение использовало визуальные стили, необходимо добавить манифест приложения или директиву компилятора, которая указывает, что следует использовать ComCtl32.dll версии 6 , если она доступна.

В другом разделе на той же странице описаны некоторые вещи, на которые следует обратить внимание с точки зрения обратной совместимости: Обеспечение совместимости вашего приложения с предыдущими версиями Windows. На визуальных стилях говорится:

Большая часть архитектуры визуального стиля разработана, чтобы упростить продолжение поставки вашего продукта в более ранних версиях Windows, которые не поддерживают изменение внешнего вида элементов управления.

Это не является проблемой. Манифест просто говорит Windows, что вы хотите версию 6 библиотеки DLL общих элементов управления. Тот, который хранится в параллельном кэше (c:\windows\winsxs), а не прежний, который хранится в c:\windows\system32. Кэширование бок о бок является мерой ада DLL, он может хранить разные версии DLL с одинаковыми именами.

Манифест не влияет на более ранние версии Windows, эти версии ничего не знали о манифестах, поэтому не знают, как их искать.

Другие вопросы по тегам