Win32 Visual Styles向后兼容性?

时间:2012-10-04 17:09:36

标签: winapi operating-system version platform visual-styles

当我在我的程序中嵌入Visual Styles清单时,这样:

// 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 个答案:

答案 0 :(得分:6)

  

这是否意味着我的程序只能在Windows XP上运行?或者如果是视觉的   他们只是使用操作时计算机上没有样式   系统默认样式?

后者是真的,documentation定义了确切的行为(强调是我的):

  

如果您希望应用程序使用视觉样式,则必须添加   应用程序清单或编译器指令,指示   如果可用,则应使用ComCtl32.dll版本6

同一页面中的另一部分介绍了在向后兼容性方面应注意的一些事项:Making Your Application Compatible with Earlier Versions of Windows。在视觉风格上,它指出:

  

许多视觉风格架构旨在使其变得简单   继续在早期版本的Windows上发布您的产品   不支持更改控件的外观。

答案 1 :(得分:4)

这不是问题。清单只是告诉Windows您需要通用控件DLL的版本6。存储在并排缓存(c:\ windows \ winsxs)中的缓存,而不是存储在c:\ windows \ system32中的旧缓存。并行缓存是DLL Hell对策,它可以存储具有相同名称的不同版本的DLL。

清单对早期版本的Windows没有影响,那些版本对清单一无所知,所以不知道要查找它们。