基于USkin软件换肤功能的实现

时间:2022-10-12 11:43:37

基于USkin软件换肤功能的实现

摘要:软件换肤功能使应用程序更具个性化,该文使用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.

上一篇:一类考虑负面评价的个性化推荐系统构架研究 下一篇:C++和Java中OOP机制之差异性分析