SDK中使用Windows XP视觉风格,并嵌入编译到exe中

XP风格就是通过给控件加一些特效(例如:边界圆角化)达到美化界面的效果。
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)

 
 
 
可以使用手工编译mainfest文件到exe中,使用mt工具进行编译,mt.exe如果是vs2005则要使用相应的sdk(可以使用最新的SDK)中mt.exe替换原安装程序中的mt.exe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值