让VC程序使用WindowXP的桌面主题风格
2007-10-05 20:22:42 来源:WEB开发网介绍
介绍怎样在让普通的程序可以支持WindowsXP的桌面主题风格.
最近写了一些简单的小应用,可是跑在我自己的XP系统上感觉很土,因为界面都是WIN95风格的,感觉格格不入。我使用了一些很COOL的XP桌面主题风格。很多程序像WINRAR都会随着系统的主题风格改变而改变界面风格。我想MS一定提供了某种机制让应用使用系统的主题风格。查了一下MSDN,原来很容易就可以实现。
WINDOWS把这个叫做“Visual Styles”虚拟风格。我们所用的普通控件都位于系统的ComCtl32.dll当中,这个DLL从版本6开始支持虚拟风格。版本6在XP和2003中是缺省附带的。而且是同时附带了这个DLL的版本5和版本6,以兼容使用老版本的应用。而VS默认编译出来的应用是使用版本5的。这就是为什么直接编译出来的应用在XP下看起来“土土”的。
我们要做的事情就是让应用在ComCtl32.dll版本6有效的情况下,使用版本6,否则使用版本5,以兼容WINXP以前的系统。要达到这个目的很简单。
打开工程的rc文件,最好是用普通的编译器打开,像notepad之类的。在该文件的最后面,在
#endif
行前面加上一行
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "./res/YourAppName.exe.manifest"
注意将YourAppName改为你的工程名。这个manifest文件可以在工程的res目录下找到。再重新编译你的应用就可以了。
以上是以VS2003 version7.1环境为例。VC6无法自动生成这个manifest文件。如果你使用的是VC6可以自己写一个manifest文件,这是一个XML文件,内容很简单可以在MSDN中查到,或在用VS2003或VS2005生成的工程上找到这个文件,直接拷贝过来,把相应的应用名和版本号改一下就可以直接用了。另外,MSDN中要求调用InitCommonControls()进行初始化。如果你使用的是WTL,框架已经调用了。MFC我没有试过(很久没用MFC了,自从用了WTL之后),照理框架也应该调用的。如果照上述步骤操作后没有反应,你可以自己在CYournameApp类的InitInstance()方法前加上一行InitCommonControls();
注意Yourname是你的工程名,这个函数是普通MFC应用的入口。
另外值得说一下的是,支持虚拟风格的系统(如XP和WIN2003),提供了一个UxTheme.lib库,专门负责控件的外观渲染,也可以查询当前系统选用的主题的诸多细节,如字体大小,颜色,背景等。如果你想自己写一个控件,同时又要支持虚拟风格,那么这个库就是你要研究的对象了。
上面所述的内容,都可以在MSDN中找到。在MSDN中搜索“Visual Styles”主题即可。需要了解更多细节的朋友可以自己看看相应的内容。
这就是我写的那个小程序,界面很COOL吧。其实我只是选用了一个很COOL的XP主题而已。
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››VC学习:对话框
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››VC6.0环境下C++编写Windows日志文件法
- ››VC6.0环境下C++编写Windows服务程序法
- ››VC MakeUp 操作XML
更多精彩
赞助商链接