关于一个换肤系统的设计解决方案(一)

本文介绍了一种基于UI绘画架构的换肤系统设计方案。该方案包括一个主控制体SkinLoader类用于统一加载皮肤资源,以及SkinSource类和ThemeFileListLoader类辅助管理主题资源。系统支持自定义着色及主题包的动态更换。


       好久没有写过文章了,这篇文章分享的是设计一个基于原有UI绘画架构的换肤系统,当然,这里做的仅仅是一个解决方案设计和实现,深入的绘画用的是已有的东西(当然着色和色相变换是我添加的(*^__^*) );

       这套东西我叫theme系统,这个系统可以分为一个主控制体和三个辅助控制部分;

主控制为一SkinLoader类:所有相关到skin的图片和颜色值还有字体都需要通过这个类加载这是一个统一加载入口;

类中包含两个map,一个为不换肤的UI object,另一个存可以换肤的UI object,还有就是一个皮肤对应的拥有体;

辅组资源类SkinSource类:装载和卸载主题包含资源;(xml格式定义的一套资源标准)

辅组主题包类ThemeFileListLoader:负责搜寻查找主题包,并提供外部查询;

主题包包含有以下元素:

1.一个主题config.xml:主题是否可以被自定义着色,主题默认着色值,版本号;

2.preview图片;

3. image文件夹,包含需要被换掉的图片资源;

4. theme.xml标明换掉的image文件对应的资源路径;

公共资源layout被存放在一个名为public的文件中,里面包含窗口layout xml文件和公共image文件。

公共主题包提供默认的所有资源,配合default主题包搭载默认主题;


一个主题的基本实现逻辑实现了:(没搞过软件工程图,画得很烂,望各位多多指教)


目前这方面的软件很多,但大部分都是收费的,不收费大部分又换的不全,对于一个学生来说花钱买是有些奢侈了,所以我直就想做一个换肤软件提供给学生,让他们做课程设计或毕业设计时能轻易给自己软件美化界面。 但是直苦于时间有限。工作太忙有时只能在周末或晚上写上两行代码。现在终于成形了本打算开源,但是有些地方还不完善(现只支持VC MFC, Windows Type: Dialog, SDI),所以现在只讲下原理,提供部分源码供感兴趣的人研究。现在发出来与大家共享。 现在商业的换肤软件大部分都是采用的Hook技术(呵呵,猜的,也许采用的更高深的技术)。Hook窗体消息,对窗体消息进行截获最终换成自已的处理方式。所以本人写的SkinMaster也是采用了同样的技术原理。说很简单但做起来有些困难。下面是我做Skin时遇到的问题及处理方式。 1.对于Windows基本控件进行Hook则可完成绘制。 2.对于菜单会制则有些麻烦,程序运行时窗体菜单WM_MEASUREITEM只运行次,所以会出现在动态换另套皮肤时菜单项大小不会跟据皮肤改变,解决方法是所有菜单你要动态生成。 3.主窗体的绘制,没啥太深技术就是要处理大量的消息。 4.滚动条的绘制,滚动条全靠Hook消息就没办法完成了,这个东西微软做的不像基本控件那样工作,还要对滚动条的API进行Hook。 先写这些,有时间我会把更详细的方法给大家写出来。下面程序中TestSkin程序提供源码,并完成了按钮等控件的换肤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值