用VC编写具有动态换肤功能的应用程序
2006-07-29 19:08
423 查看
用VC编写具有动态换肤功能的应用程序 | ||||
2002-07-15· ·信息产业部电子第二十二研究所青岛分所 郎锐··yesky | ||||
摘要: 本文介绍了一种为应用程序工具条添加及动态更换皮肤的程序设计方法。 引言 如果能在自己的程序中也具备动态更换皮肤的能力,将使软件平添几分亮点从而更易博得用户的青睐。具笔者了解,当前介绍这种技术的文章资料较少, 与其流行程度很不协调,而且现有的少量资料也多是针对对话框进行的,无非是在对话框上覆盖一层图片,并通过更换图片来实现程序的动态换肤。虽然这也是动态 换肤的一种,但由于技术过于简单,本文将着重介绍另外一种动态换肤技术--工具栏的动态换肤技术,这也是IE浏览器等软件所普遍采用的一种换肤技术。 程序支持动态换肤 由于换肤功能是对程序框架的扩展,所以相关处理代码理所当然地要在主框架类中进行。为了使程序能具备换肤的能力,必须首先使程序具备换肤的基本 条件。首先可以明确的是:处理对象为普通的工具条,其基类为CToolBar。通过MSDN帮助可以了解到该类及其"近亲"的继承关系如图所示。通过对这 几个相关类的查阅,可以发现CReBar类比较特殊,它本身并不用于显示,而主要用于包容其他的工具条,例如,可以通过其成员函数AddBar()将工具 条(ToolBar)、对话条(DialogBar)等类型的工具条加入到复合条(ReBar),使工具栏中可以显示多个工具条。所以可以得出这样的设计 思路:程序框架的工具栏不再直接以工具条来实现,而是以复合条为基础,并通过CReBar的AddBar()函数将原先的工具条加入其中。皮肤则可以通过 设置与CReBar相关的REBARBANDINFO结构而平铺于复合条之上,由于有工具条覆于其上,因此必须在创建工具条时修改其风格(Style), 使其背景为透明,这样才能透出位于下层的皮肤。 接下来在工具条创建时需要特别指定TBSTYLE_TRANSPARENT等窗口风格来使其背景透明,并在创建完复合条后通过AddBar()函数将背景透明的工具条添加其中:
皮肤的装载与动态更换 皮肤一般是以外部资源的形式发布,在使用时再由程序动态装载。皮肤加载到工具栏的过程大致可分两步:先将皮肤从文件装载到内存,然后再由内存位 图直接绘制到复合条上去。对于第一步,可用API函数LoadImage将外部文件back.bmp从文件按位图的格式装载到内存,返回的句柄可通过强制 转换得到HBITMAP型的位图句柄m_bmpBack:
小结 本文通过对复合条及CReBar类的使用实现了在VC下对应用程序的动态皮肤更换。CReBar类的功能非常丰富,本文限于篇幅未能做深入的介 绍,关于该类的详细情况请参阅微软公司的MSDN帮助。本文所述程序在Windows 98下,由Microsoft Visual C++ 6.0编译通过。 |
相关文章推荐
- 用vc编写具有动态换肤功能的应用程序
- 用VC编写具有动态换肤功能的应用程序
- 用VC编写具有动态换肤功能的应用程序
- 用VC编写具有动态换肤功能的应用程序
- 用VC编写具有动态换肤功能的应用程序
- 用VC编写具有动态换肤功能的应用程序
- C编写的具有模板功能的Vector - 基于动态顺序数组
- 用VC编写实现ping 功能的动态连接库
- 全面拥抱 Qt 4.6 + 让Qt应用程序支持换肤(Skin)功能
- 内核态下基于动态感染技术的应用程序执行保护(二 使用汇编语言编写内核态程序)
- android换肤功能中,如何动态获取控件中背景图片的资源id?
- android换肤功能 如何动态获取控件中背景图片的资源id?
- VC实现具有回车移动焦点功能的编辑框
- 用TTS技术开发具有文本朗读功能的应用程序
- 手把手教你编写一个具有基本功能的shell
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序、动态生成查询、自动分页功能
- 手把手教你编写一个具有基本功能的shell(已开源)
- Android 打造自己的个性化应用(二):应用程序内置资源实现换肤功能
- 编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
- 编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。