如果你想让VS6, VS2003,的MFC程序拥有XP风格(#add VS2005自动为xp风格)那么就学习下面的方法吧

注:此方法必须是用VC6编译,vs2005转换编译vc6.0的会报错, 自动是xp风格(那么2005如何使用vc6风格呢?)

 

微软同学永远是个把简单问题复杂化的孩子,这不,当年为了在 Windows XP 中同时支持两套控件风格(新的 XP 风格和旧的 95/98 风格),“发明”了 .manifest 这么个玩意,使以前的老程序也能自动使用上新的控件风格。

然而在 VS 里,微软并不是总是默认帮我们自动生成这个破玩意儿。最早的办法就是手写一个 .manifest XML 文件,不过这个办法在 VS 2005 编译出来的程序里似乎并不起作用。当然,新方法总是随之而出的,而且很“简单”(绕了一大圈又回来了):

在 Project Properties 对话框的 Configuration Properties | Linker | Manifest File | Additional Manifest Dependencies 选项里,填入:

 "type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'"

(#add 此法验证有效)

或者在程序里直接写下如下代码:

#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Test.Research.SampleAssembly' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='0000000000000000' language='*'\"")

(#add 此法运行报错,不能通过)
方法一:
1.首先确认你在Windows XP下,因为如果在98或2K下,那除非自己重画画所有界面,要不基本上是无法实现XP风格的。

Code:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Microsoft.Windows.dummy"
type="win32"
/>
<description>Your app description here</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>


不要问我这段代码是什么意思,我也不知道,这段代码其实和任何一种试图实现XP风格时用的XML代码没有本质区别,几乎是一样的。粘贴进去时候存盘,名字随便取一个,反正名字到后面还是需要修改的。

3.假设在你的目录c:\abc下有一个可执行文件abc.exe,我们把刚才建立的那个XML的文件拷贝到c:\abc下,并把名字改为 abc.exe.manifest,这时候你可以运行abc.exe,看看是不是已经具有了XP风格了?依次类推,在每一个你想改为XP风格的程序的统一 目录里建立一个上面说的XML文件,并把名字改为可执行文件的名字加上".manifest"的扩展名(注意,不要把那个exe去掉,就可以了,你可以试 着在MSDEV.exe所在目录中搞一个medev.exe.manifest的XML文件,看看VC起了什么变化吧(#add 并未成功,会有未找到MFC80D.DLL错误).

VS6.0

连资源编辑器里的对话框都变的漂亮了

对话框


方法二:(这种方法我测试可以成功,但是会影响保存的内容,保存成乱码!)
首先在RES目录下建一个文件,命名Master.manifest然后用记事本打开放入

Code:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Microsoft.Windows.dummy"
type="win32"
/>
<description>Your app description here</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>


保存..

然后VC6导入资源,把这个新建的文件导入,类型为24
保存..

用记事本打开rc文件, 找到自定义资源的地方
改成如下句子
IDR_MANIFEST 24 MOVEABLE PURE "res\\Master.manifest"

MOVABLE PURE是一定不能少的..保存
进入VC6, 把这个自定义资源IDR_MANIFEST的ID改为1(没有引号)

编译,,看一看是不是有了XP的风格.

这个程序就不用带第一种方法的那个文件了.

posted on 2011-03-14 17:28  maxweii  阅读(791)  评论(0编辑  收藏  举报