万星星@豌豆荚 欢迎加入我们
一个吃软饭的男人!!!!!我只想写程序####
微博:http://weibo.com/wanlianwen
posts - 172,  comments - 1253,  trackbacks - 0
我有一个以前的用vc6开发的小示例,移植到vs2005上去,今天突然发现了一个小问题:直接使用vs2005生成的项目编译后工具栏的风格是xp风格(图1),而移植上去的项目工具栏风格却是2k风格(图2)。

(图1)

(图2)
当然我很清楚,这是manifest导致的问题,于是自然在vs2005直接生产的项目里去寻找manifest文件,结果没发现,转至项目目录下也没有发现。感觉很是奇怪,于是我全项目搜索“manifest”,发现stdafx.h里有如下代码:
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
记得在vs2003里面是默认生成一个manifest,不同项目里面的manifest内容大同小异。而在vs2005里面是通过一个扩展的#pragma comment指令来生成manifest,该指令在vs2003中是无效的。编译器内部具体采用什么手段就不得而知,也无暇细究,不过大概思想就是强制使用高版本的common control达到漂亮的显示效果。我在c6转到vs2005的工程对应位置加上后,即达到了图1的效果,包括所有的common控件都切换到了xp风格。
这里注意几点:
1、必须使用unicode编译,否则无法达到效果。vs2005默认生产的项目是基于unicode编译的。至于网上所说的手动添加manifest文件的方法我没有试验过。
2、上面的#pragma comment指令只在vs2005中有效,在vs2003里面必须手动把编译字节码改为unicode才可使common控件变为xp风格。
3、common控件的xp风格最终还是取决于操作系统还有就是当前的显示主题,在2k的机器上是无法显示出xp风格的,在xp以上的机器上如果选择2k经典主题还是无法显示出xp风格。
posted on 2007-02-28 19:36 万连文 阅读(3203) 评论(0)  编辑 收藏 引用 所属分类: 乱七八糟

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


简历下载
联系我

<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用链接

留言簿(66)

随笔分类

随笔档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜