Визуальные стили 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, эти версии ничего не знали о манифестах, поэтому не знают, как их искать.