XP风格的UI效果是由Microsoft.Windows.Common-Controls提供的一种实现,为了拥有这种效果,你需要让你的程序依赖于Microsoft.Windows.Common-Controls这个组件。微软提供了Manifest来让让我们声明这种依赖。
★★★方法一
在Win32程序中默认没有使用Windows XP的视觉风格
如果你使用的是Visual Studio 2005以后的版本VS,
只需要在stdafx.h中加入以下代码即可:
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' " "version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
MFC中默认是使用了视觉样式的,不过它用的以下代码:
01) #ifdef _UNICODE
02) #if defined _M_IX86
03) #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' " "version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
04) #elif defined _M_IA64
05) #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' " "version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
06) #elif defined _M_X64
07) #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' " "version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
08) #else
09) #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' " "version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
10) #endif
11) #endif
如果你的项目是ANSI,可以把第一行的#ifdef _UNICODE和最后一行的#endif去掉就可以了。
编译后生成一个与程序同名扩展名为.manifest的文件内容如下所示
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' />
</dependentAssembly>
</dependency>
</assembly>
★★★方法二
1)在程序的.rc文件中定义下面这一行(EXE中)
1 RT_MANIFEST "XPstyle.manifest"
若为DLL中则定义为
2 RT_MANIFEST "XPstyle.manifest"
2)将下面的内容保存为XPstyle.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="XP style manifest"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
</assembly>
3)编译.rc文件,最终以上信息会随资源文件一起嵌入程序文件中
+++++++++++++++++++MSDN 引申+++++++++++++++++++++++++++
How to: Embed a Manifest Inside a C/C++ Application
Troubleshooting C/C++ Isolated Applications and Side-by-side Assemblies
About Manifest Tool(mt.exe)