引言 【扩展信息:新快报:国内首家锂离子电池研发基地花落深】
如果能在自己的程序中也具备动态更换皮肤的能力,将使软件平添几分亮点从而更易博得用户的青睐.具笔者了解,当前介绍这种技术的文章资料较少,与其流行程度很不协调,而且现有的少量资料也多是针对对话框进行的,无非是在对话框上覆盖一层图片,并通过更换图片来实现程序的动态换肤.虽然这也是动态换肤的一种,但由于技术过于简单,本文将着重介绍另外一种动态换肤技术--工具栏的动态换肤技术,这也是ie浏览器等软件所普遍采用的一种换肤技术.
程序支持动态换肤
由于换肤功能是对程序框架的扩展,所以相关处理代码理所当然地要在主框架类中进行.为了使程序能具备换肤的能力,必须首先使程序具备换肤的基本条件.首先可以明确的是:处理对象为普通的工具条,其基类为ctoolbar.通过msdn帮助可以了解到该类及其"近亲"的继承关系如图所示.通过对这几个相关类的查阅,可以发现crebar类比较特殊,它本身并不用于显示,而主要用于包容其他的工具条,例如,可以通过其成员函数addbar()将工具条(toolbar).对话条(dialogbar)等类型的工具条加入到复合条(rebar),使工具栏中可以显示多个工具条.所以可以得出这样的设计思路:程序框架的工具栏不再直接以工具条来实现,而是以复合条为基础,并通过crebar的addbar()函数将原先的工具条加入其中.皮肤则可以通过设置与crebar相关的rebarbandinfo结构而平铺于复合条之上,由于有工具条覆于其上,因此必须在创建工具条时修改其风格(style),使其背景为透明,这样才能透出位于下层的皮肤.
由于在程序设计时使用了crebar,在普通程序中实现起来比较麻烦,可以在创建工程时在第四步选中"internet explorer rebars"选项,这样创建的工具栏将在复合条上添加一个工具条与一个对话条.只需从主框架类的头文件与实现文件的oncreate()函数里将对话条cdialogbar的实例对象m_wnddlgbar的声明部分与部分相关代码去除即可.
... 下一页