时间:2022-10-12 11:43:37
摘要:软件换肤功能使应用程序更具个性化,该文使用USkin界面换肤开发包,在MFC下实现了软件换肤功能。实例证明,使用USkin进行软件换肤方面快捷。
关键词:软件换肤;USkin;VC;MFC
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)03-0608-03
Realization of Software Changing Skins Based on USkin
LUO Ru-juan
(Department of Correspondence,Guangzhou Civil Aviation College,Guangzhou 510403,China)
Abstract: Skins make software more personalize.Using USkin interface skin development kit,chageing skins is achieved in MFC.Example shows USkin is easy to use.
Key words: Skin; USkin; VC; MFC
一款优秀的软件,除了功能健全、性能稳定、容易操作之外,软件界面的美观越来越受到人们的重视。人们不再满足于传统的矩形windows窗体及控件,而是由用户根据自己的爱好及心情自由控制软件界面,真正实现了软件界面对用户的友好性。目前,有不少软件实现了界面的换肤功能[1],如腾讯QQ系列软件、迅雷软件等。而要实现这一功能,软件换肤技术就是基础。董秋鸿,饶存存,毛治佳等介绍了两种软件换肤功能的开发思路,设计方法及实现过程[2];何永太通过对Windows程序运行机制的分析,提出了一种通过更改VCL组件窗口过程以实现动态改变VCL组件外观的方法[3];李建民使用Win32 API实现窗体皮肤更换[4]。本文就利用USkin界面换肤开发包介绍软件换肤功能的实现。
1 USkin
USkin是一个界面换肤开发包,于2005年2月完成第一版本,目前最新版本是于2008年11月的Uskin V3.0。通过简单的调用就能实现换肤功能。使程序员专注于软件功能实现,而不用为了实现漂亮的界面而费心费力。USkin特性:
1)支持20多种Windows标准控件;
2)支持文件、颜色、打印、字体等标准对话框;
3)支持第三方/自定义控件;
4)支持所见即所得的皮肤文件编辑;
5)支持MDI/SDI/Dialog风格的应用程序;
6)支持WindowsBlind皮肤文件导入,多达万个现成皮肤供您使用;
7)支持颜色主题,一套皮肤可以演变成多种皮肤*;
8)支持多种编程语言;
9)支持多线程;
10)支持动态换肤;
11)支持所有弹出菜单,包括Edit控件右键弹出菜单;
12)只需三行代码即可实现换肤;
13)支持ListView/TreeView等控件滚动条换肤;
14)皮肤资源文件所占空间小。
2 USkin界面换肤开发包
USkin界面换肤开发包由引入库USkin.lib,动态库USkin.dll,头文件USkin.h,免费的皮肤King.u3等组成。动态库中导出的接口函数如图1所示。
其中,重要的有以下几个:
1)函数UskinInit,作用是初始化USkin库,并且加载指定的皮肤文件。函数原型为:
图1 USkin库中函数接口
BOOL USkinInit( LPCTSTR lpszUserName//用户名
LPCTSTR lpszRegCode//序列号
LPCTSTR lpszFileName//指定的皮肤文件
);
参数lpszUserName指定用户名。如没有用户名则传入NULL;lpszRegCode指定与用户名关联的正确的序列号,如无用户名则传入NULL;lpszFileName指定加载的皮肤文件名,支持相对路径如neemedia.u3,..\neemedia.u3。当成功初始化USkin库返回真,否则返回假。
2)函数USkinExit作用是退出并销毁USkin,释放USkin所用内存。函数原型为:
BOOL USkinExit( );
当成功退出USkin库返回真,否则返回假。
3)函数UskinLoadSkin,作用是从文件中加载USkin皮肤资源,并将应用更改到界面上。函数原型为:
BOOL USkinLoadSkin( LPCTSTR lpszFileName // USkin皮肤资源文件名);
参数lpszFileName指定加载的皮肤文件名,支持相对路径如neemedia.u3,..\neemedia.u3。当成功加载USkin文件并且应用到界面上返回真,否则返回假。
4)函数USkinRemoveSkin作用是暂停使用USkin,不退出USkin环境,软件界面回到Windows操作系统默认界面。函数原型为:
BOOL USkinRemoveSkin( );
成功操作返回真,否则返回假。
5)函数USkinApplyColorThemeByRGB作用是根据指定的RGB颜色来应用颜色主题。函数原型为:
BOOL USkinApplyColorThemeByRGB( COLORREF clrTheme // RGB颜色);
参数clrTheme指定颜色,应用将指定的颜色应用到主题。成功操作返回真,否则返回假
3软件换肤功能的实现
USkin是一套用于换肤的SDK,使用USkin非常简单。方法如下:
1)调用USkin_InitUSkin进行初始化
2)调用USkin_LoadUSkin进行换肤
3)调用USkin_ExitUSkin退出
下面介绍MFC下使用USkin进行软件换肤功能的实现,具体步骤如下:
第一步:新建一个基于对话框的应用程序,为了对比换肤前后窗体的差别,把一些常用的控件加入到“个人基本资料”对话框中,设计完成后的窗体如图2所示。
图2换肤前的窗体
在“个人基本资料”对话框添加了一个菜单“更改外观”,用于选择不同的皮肤。
第二步:
把uskin界面换肤开发包中的引入库USkin.lib,动态库USkin.dll,头文件USkin.h,几个免费的皮肤如King.u3等拷贝到我们的工程目录中,皮肤文件放入到debug文件夹下,并把USkin.lib引入库文件添加到工程中,在工程中把头文件USkin包含进来。具体在应用程序类的头文件中添加此语句:
#include“uskin.h”
第三步:
在应用程序类的InitInstance()成员函数中调用USkin_InitUSkin进行初始化。BOOL CChangeSkinApp::InitInstance()
{AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
USkinInit(NULL,NULL,_T("King.u3"));
CChangeSkinDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{}
else if (nResponse == IDCANCEL)
{}
return FALSE;
}在应用程序类的ExitInstance()成员函数中调用USkin_ExitUSkin退出。
int CChangeSkinApp::ExitInstance()
{USkinExit();
return CWinApp::ExitInstance();
}
换肤可在菜单项的命令响应函数中调用USkin_LoadUSkin进行。
void CChangeSkinDlg::OnKing()
{USkinLoadSkin("king.u3");
}void CChangeSkinDlg::OnGreen()
{USkinLoadSkin("绿色风格.u3");
}换肤后的窗体如图3和图4所示。
图3使用USkin V2.2 King.u3皮肤的界面
图4使用USkin V3.0 DiyGreen.msstyles皮肤的界面
图3使用的是USkin V2.2的动态库,图4使用的是USkin V3.0的动态库。
4结束语
USkin能改变软件的界面,实现不同的界面外观。开发人员不必在美化界面上花费太多的精力,只需完成软件的功能,调用几个函数,能立刻让软件界面变得与众不同,在软件开发过程中节省开发时间和开发成本。本程序在Visual Studio6.0和WindowsXP下测试通过。
参考文献:
[1]柳长青.一种新型网页换肤技术的实现[J].电脑学习,2008(4):29-30.
[2]董秋鸿,饶存存,毛治佳等.软件换肤功能的两种实现方法[J].电子元器件应用,2010,12(12):81-84.
[3]何永太.VCL换肤方法的研究与实现[J].安徽水利水电职业技术学院学报,2006,6(3):73-76.
[4]李建民.VC实现窗体换肤[J].电脑编程技巧与维护,2011(5):10-12.