关于使用vc进行换肤设置和使用skinplusplus.dll美化界面

来源:互联网 发布:fc2中文域名 编辑:程序博客网 时间:2024/04/29 14:31

       最近接触到的程序是使用NI的activex控件,基本上软件的外观和按钮都是一个模样,所以从网上搜索了一番,发现了几种关于使用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风格效果,对于没有作第三步的按钮,还保持原来的样式。

       第二种方法就是关于.manifest文件了,这个在网上也是比较多的盛传的方法。这样有两种实现方式,一种是.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,这样就真相大白了。

上述方法对于打包来说有些许的麻烦要把相应的文件打包在一起,那么有没有可以直接放在代码里进行编译实现的呢。答案是肯定的也就是我要说的第二种方式:.manifest文件还是要有的,只不过不是和.exe文件放在同一目录中,而是把它放到资源文件中,编译后生成.res文件,link后自然就和.exe文件“合”到一起了。那么首先让我看一下这个.manifest文件

 

相信你一眼就看到了其实这就是一个XML文件,打开记事本,复制上面的内容,然后存盘,文件名任意。然后在VC中新建一个MFC AppWizard(exe)工程,Document/View或Dialog均可,接着把XPStyle.manifest复制到工程所在目录,再用记事本或其它文本编辑工具手动修改工程目录下的资源文件(.rc),在文件最后加上一行:
1 24 “XPStyle.manifest”
在VC中编译并连接工程生成.exe可执行文件,运行一下看看。

哈哈绝对的可以啦
      这里我还要多解释一下,最后加上的那一行,“1”代表资源ID,必须是“1”。“24”代表资源类型,我想我们对RT_ACCELERATOR、RT_BITMAP、RT_MENU、RT_STRING等资源都非常熟悉,而“24”实际上是RT_MANIFEST。
这样就好了,编译后的这个.exe文件拿到哪都可以,都是XP风格的界面,不用再依赖.manifest文件了,并且对于所有控件(不仅仅是Button)都可以实现XP风格。哦,当然了,必须在XP或2003系统下才可以。

       接下来我要讲第三种方法了,这是一种比较简单的方法,这里我们需要从网上找到几个文件,一个SkinPlusPlus.DLL以及三个皮肤文件Minimized.ssk、SoftCrystal.ssk、XPCorona.ssk。有了这三个文件我们就可以美化我们程序的界面了。这里我想说的一点我今天做了测试我发现在xp系统下和在win2000系统下XPCorona.ssk的皮肤界面是不太一样的,xp下会显得更生动一点,2000下有点像java的界面。好了不罗嗦了咱们开始实现。

     1、从网上找到SkinPlusPlus.DLL、SkinPlusPlus.H 还有就是SkinPlusPlus.lib,将.h和.lib放到程序的代码目录下,Minimized.ssk、SoftCrystal.ssk、XPCorona.ssk分别放到代码目录下和执行目录下,SkinPlusPlus.DLL放到执行目录下。

     2、将SkinMagicLib.lib添加到工程中:Project->Settings->Link在Object/libary modyles:编辑框中输入  SkinMagicLib.lib

     3、在程序找到你的APP类在其虚函数InitInstance()中,   后面添加InitSkin(“XPCorona.ssk”) 这里可以根据喜好放置  Minimized.ssk、SoftCrystal.ssk、XPCorona.ssk,然后重载app的ExitInstance函数添加ExitSkin()函数。编译生成可执行exe文件运行你会发现不一样界面,是不是很不不错,比较美观。

 

看一下效果如下(XPCorona.ssk):

=