VC皮肤以及XP风格实现

本文章由三部分组成:
1.利用XPButton类实现XP风格的按钮。
2.无负担实现XP风格界面。
3.VC皮肤的使用。
良好的程序界面会给客户留下好的印象。通过本文介绍的三种方法,可以在实际编程中满足一些对界面要求不是很高的软件的需求。

第一部分:
利用XPButton类实现XP风格的按钮。此部分主要用到一个网上流传的类:XPButton。
具体使用步骤如下:
1.创建基于对话框的MFC工程假设命名为:XPButtonTest,将XPButton.cpp和XPButton.h放到当前工程目录,通过Project->Add to project->Add file to project将XPButton.cpp和XPButton.h导入到工程中。
2.在CXPButtonTestDlg.h添加头文件 #include "XPButton.h".
3.关闭工程,将工程目录下的.clw文件删除,重新打开工程,为对话框添加一个按钮控件。通过类向导为此按钮控件添加一个变量,变量类型(Variable type)选择CXPButton。在此步骤中如果不删除.clw文件,则在选择变量类型的时候下拉列表中不会出现CXPButton选项,可以选择CButton,然后手动到CXPButtonTestDlg.h中将变量类型修改为CXPButton。
4.编译运行就可以看到按钮具有XP风格。

注意:此方法只能使变量类型修改为CXPButton的按钮控件实现XP风格效果,对于没有作第三步的按钮,还保持原来的样式。

第二部分:
无负担实现XP风格界面
  关于让自己的程序界面实现XP风格这个问题,在网上的讨论很多,大多数的作法都是写一个.manifest文件,然后将文件名改一下,比如.exe文件为test.exe,就将这个.manifest文件改名成test.exe.manifest,并将其和test.exe放在同一个目录里,这样test.exe在XP或2003(必须启动Themes服务)下运行时就会呈现XP界面风格。


有件事情必须说一下,按照上面的方法,test.exe必须先调用InitCommonControls函数(已经废除,不建议使用)或者InitCommonControlsEx函数从comctl32.dll中注册组件类。这一步在VB中是必须的,但是在VC(MFC程序)中,我们好像并没有调用这个函数,可是编译后的程序为什么还能实现XP风格呢?原因是MFC替我们做了这件事。如果我们是让MFC注册的窗口类,它会调用_AfxInitCommonControls函数,而_AfxInitCommonControls的主要操作就是把comctl32.dll装载进来,然后判断.dll文件中有没有InitCommonControlsEx函数,如果有就调用,没有则调用InitCommonControls,到此真相大白。可能有人和我一样,看着以“afx”开头的窗口类名称很不舒服,于是喜欢自己注册窗口类,但在我们注册自己的窗口类时一定要确保调用过InitCommonControlsEx函数,这点一定要记得,如果忘记的话你将会看到一个空白的窗口。


说了这么多,有点跑题了,呵呵。现在回到正题。我上面提到的方法很多网站上都有介绍,但是却有一个致命的缺点,就是必须有那个.manifest文件如影随形,exe文件到哪,它就得到哪,这当然是我们不愿意看到的。有没有办法能把它“合”到exe文件中呢?答案是肯定的,这也正是本文题目中“无负担”三个字的意思。


当然了,那个.manifest文件还是要有的,只不过不是和.exe文件放在同一目录中,而是把它放到资源文件中,编译后生成.res文件,link后自然就和.exe文件“合”到一起了。


首先,请出.manifest文件:


大家也看到了,这其实是一个XML文件,打开记事本,复制上面的内容,然后存盘,文件名任意,这里我存为XPStyle.manifest。


然后在VC中新建一个MFC AppWizard(exe)工程,Document/View或Dialog均可,接着把XPStyle.manifest复制到工程所在目录,再用记事本或其它文本编辑工具手动修改工程目录下的资源文件(.rc),在文件最后加上一行:

1 24 “XPStyle.manifest”

 

在VC中编译并连接工程生成.exe可执行文件,运行一下看看。


就这么简单?就这么简单。   :D


这里我再多解释一下,最后加上的那一行,“1”代表资源ID,必须是“1”。“24”代表资源类型,我想我们对RT_ACCELERATOR、RT_BITMAP、RT_MENU、RT_STRING等资源都非常熟悉,而“24”实际上是RT_MANIFEST。最后面引号中的东西我就不再啰嗦了。


好了,编译后的这个.exe文件拿到哪都可以,都是XP风格的界面,不用再依赖.manifest文件了,并且对于所有控件(不仅仅是Button)都可以实现XP风格。哦,当然了,必须在XP或
2003系统下才可以。

 

第三部分
VC皮肤的使用
此文章介绍两类VC皮肤的实现方法,每一类都有3种皮肤。
第一类:
此类VC皮肤的实现依靠一个SkinPlusPlusDLL.dll以及三个皮肤文件Minimized.ssk、SoftCrystal.ssk、XPCorona.ssk。
具体实现步骤参见实例中的说明文件。

此类皮肤要求再运行的时候皮肤文件以及dll文件必须附带在可执行程序当前目录。

第二类:
此类VC皮肤的实现优点是程序编译成功后,运行可执行程序的时候不再需要附带皮肤文件,因为皮肤资源已经编译到了可执行程序中。
需要用到DETOURS.lib,SkinMagicLib.lib,SkinMagicLib.h以及三个皮肤文件
Devior.smf,Tusk.smf,x-plus.smf
1.创建工程(假设工程名为Skin)将SkinMagicLib.h导入工程中:Project->Add to project->Add file to project.
2.将SkinMagicLib.lib和DETOURS.lib添加到工程中:Project->Settings->Link在Object/libary modyles:编辑框中输入这两个文件名(如果这两个文件不在当前目录下,要标明文件存储目录),中间用空格隔开。
3.将皮肤资源文件添加到工程资源中
ResourceView->Import->双击Devior.smf(或者是其余两种皮肤文件中的一种)添加到资源中。 Resource type:可以填写"SKIN",
添加后默认资源ID为:DR_SKIN1,然后手动改变资源ID名称为:"IDR_A"(注意此处要有双引号,因为LoadSkinFromResource函数第二个参数为资源ID,且是一个字符串类型),对于一个工程只能同时使用一种皮肤。
4.在SkinApp类的(工程名)的.cpp文件中添加头文件#include "SkinMagicLib.h",
在InitInstance函数的 #endif之后添加如下代码

编译运行。

 

 

本文章源码在:

http://download.csdn.net/source/1915560

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值