一种可扩展的皮肤系统及其实现方法

文档序号:6461493阅读:122来源:国知局
专利名称:一种可扩展的皮肤系统及其实现方法
技术领域
本发明涉及皮肤技术,特别是涉及一种可扩展的皮肤系统及其实现方法。
技术背景通常,软件运行时都会有交互界面,以便于接受用户指令并向用户反馈信 息,交互界面的好坏是一个软件是否被用户接受的重要因素。现有的许多软件都使用皮肤系统来优化交互界面的表现,传统的皮肤系统主要有两种发展方向 一种是追求完备,在实现皮肤系统过程中不注重系统资源优化,导致皮肤系统 相当庞大;另一种是皮肤系统与软件内部逻辑耦合很好,皮肤系统占用资源不 高,但难以扩展。随着计算机处理能力的提高以及交互界面不断发展的需要,皮肤系统的架 构也在不断发展,总体上可分为三种方案在代码中定义皮肤相关元素、使用 INI文件定义少量皮肤元素属性、使用扩展标记语言(XML)或相关可扩展标 识语言描述各种皮肤元素属性及行为。其中,由于前两种方案在其描述能力和 可扩展性上都存在较大的局限性,在现代皮肤系统设计中很少釆用,因此下面 主要对第三种方案的相关现有技术进行说明。一般,皮肤系统需要提供以下内容 一组已实现的皮肤控件、 一组与已实 现皮肤控件相关联的图像文件、 一组皮肤系统的对外接口、 一种描述皮肤系统 相关属性与行为的标识语言。其中,皮肤控件也可称为皮肤组件或皮肤元素, 对外接口就是指外部应用编程接口 (API)。在现有的皮肤系统中, 一种皮肤系统仅实现与特定应用相关的一些皮肤控 件,另一种皮肤系统则实现尽可能多的皮肤控件,两种系统都会提供相应皮肤 控件的名称关键字和属性关键字,用户在皮肤描述文件中必须使用所提供的关键字来描述皮肤控件,不能对皮肤控件进行扩展。现有的皮肤系统通常将皮肤控件与对应的图像文件进行一对一的关联,在 创建皮肤控件时,每个皮肤控件都会加载其所关联的图像文件,然后根据属性 定义对皮肤控件进行绘制,其中,皮肤控件关联的图像文件宽高与皮肤控件自 身的宽高需要保持一致,才能保证正确绘制。对于个别需要在程序运行中变形 的皮肤控件,其所关联的图像文件会具有水平或垂直延展的属性定义,但对于 复杂的四周延展或透明区域定义,则不能提供相关的属性,而必须在图像文件 设计时进行切割,分成更小的皮肤控件单元进行处理。比如对于一个可变形 的、圆角矩形形状的皮肤控件,它在变形过程中四个角保持不变,但四条边以 及矩形中部都会进行相关的延展。那么,现有皮肤系统的处理方法通常是将该 皮肤控件的四个角单独切分成四个独立的小皮肤控件,这些小皮肤控件不可延展;而其他部分定义为另一个小皮肤控件,该小皮肤控件可以作某种方向上的延展。现有皮肤系统中,皮肤描述文件中所描述的各个皮肤控件基本是相互独立的,各个皮肤控件之间不对其他皮肤控件进行复用。比如在现有系统中,一个窗口皮肤控件和一个列表皮肤控件都需要用到滚动条皮肤控件,但在皮肤描 述文件中需要在描述窗口皮肤控件和描述列表皮肤控件时都描述滚动条皮肤控 件的属性,且在创建时也各自独立创建。从上述描述可以看出,现有皮肤系统在实际应用中存在以下问题第一、用户不能根据自身需要方便地扩展皮肤控件,因此,对于那些只提 供应用相关皮肤控件的皮肤系统,其应用范围非常狭窄;而对于那些提供完备 皮肤控件的皮肤系统,则非常庞大、复杂,不适合于轻量级简单的应用环境。第二、如果多个皮肤控件关联到同一个图像文件,由于每个皮肤控件创建 时都会独立加载图像文件,那么,同一个图像文件将会被加载多次,会重复占 用更多的系统资源,导致系统资源的浪费。第三、现有皮肤系统图像文件在加载图像后所做得变换很少,因此对于一 些需要特珠变化的皮肤控件需要进行切分,分成若干个行为更加单一的皮肤控件,如此,不仅增加了系统资源的占用,还增加了处理的复杂度。第四、当多个控件使用相同的皮肤控件作为它的一部分时,独立描述与创 建相同的皮肤控件,也将导致更多的系统资源占用。发明内容有鉴于此,本发明的主要目的在于提供一种可扩展的皮肤系统及其实现方 法,能在系统资源占用尽量少的基础上,实现皮肤控件的任意扩展。 为达到上述目的,本发明的技术方案是这样实现的本发明提供了一种可扩展的皮肤系统,包括皮肤控件管理器、 一个以上 基本控件以及XML解析器;其中,皮肤控件管理器,用于管理所有皮肤控件,负责从XML解析器中读取解 析后的XML配置文件中的相关配置信息并创建所需皮肤控件;基本控件,用于在用户使用皮肤系统创建应用程序时直接使用、或作为基 本皮肤控件创建用户所需的皮肤控件;XML解析器,负责读取并解析XML配置文件,将解析后的内容提供给皮 肤控件管理器调用并读取。所述皮肤控件管理器进一步包括皮肤控件管理单元、皮肤控件创建单元、 配置信息读取单元;其中,皮肤控件管理单元,用于管理所有皮肤控件;配置 信息读取单元,负责从XML解析器中读取解析后的配置信息,并将读取的配置信息发送给皮肤控件创建单元和皮肤控件管理单元;皮肤控件创建单元,根据收到的配置信息创建用户所需的皮肤控件。其中,所述基本控件包括提供接口的基类控件、设置参数的参数类、提供 控制特性的控件类以及作为公共元素的公共控件。上述方案中,所述皮肤控件管理器还包括皮肤控件ID到其创建函数指针的映射表、以及皮肤控件类型到其创建函数指针的映射表。上述方案中,所述皮肤控件管理器还包括图像加载管理单元,用于控制图 像文件是否加载。上述方案中,所述皮肤控件管理器还包括策略设置单元,用于设置皮肤控 件对齐策略和图像变形绘制策略。本发明还提供了一种可扩展皮肤系统的实现方法,包括提供一个以上基本控件,该方法还包括A、 从XML配置文件中读取配置信息,根据所读取的配置信息查找创建函 数,如果找到,则执行步骤B,否则结東当前处理流程;B、 调用所找到的创建函数实例化皮肤控件,并根据基本控件获得皮肤控 件的参数对象指针;C、 、从XML配置文件中读入皮肤控件关联的属性,配置参数对象,根据配 置的参数创建所需的皮肤控件。其中,步骤C之后,该方法进一步包括通过递归方式创建步骤C所创建 的皮肤控件的子皮肤控件,并将创建的子皮肤控件加入到相应的子皮肤控件列 表中。上述方案中,所述基本控件包括提供接口的基类控件、设置参数的参数类、 提供控制特性的控件类以及作为公共元素的公共控件。上述方案中,该方法进一步包括在皮肤控件管理器中设置皮肤控件ID到 其创建函数指针的映射表、以及皮肤控件类型到其创建函数指针的映射表;步 骤A所述查找创建函数为根据所设置的映射表进行查找。上述方案中,图像文件加载时,该方法还包括a. 读入与所创建皮肤控件相关联的图像文件名;b. 根据图像文件名在所述映射表中查找图像数据;c. 判断是否找到所需的图像数据,如果找到,则将相应图像数据的指针反A虫i入、1/ A瓶厶l t;4 AA ^ W " 、l力丄匕i:丄A3 士 A 、1, A新A,l '巻上"山ti丄O^r 乂止上L A . 士'吸;s口 3則文'ii'J处口'J乂乂AJ7U工IT, 7TTr犯卞rFM亇1X 3則处ciy 乂又肌:Jii'l卞W、J风W义 量中;否则,分配相应图像数据所需的资源,加载相应图像数据,并在映射表 中增加所述图像文件名到图像数据的映射项。上述方案中,该方法还包括预先设置皮肤控件对齐方式的策略以及图像 变形绘制的策略。本发明所提供的可扩展的皮肤系统及其实现方法,具有以下的优点和特点 1 )本发明提供一系列基本控件和 一个皮肤控件管理器,使用户可以直接使 用所提供的皮肤控件,也可以根据自身需要在皮肤控件管理器的控制下,基于 所提供的基本控件动态任意创建自身所需的皮肤控件,轻松扩展用户自己特定 的皮肤控件,而不需要对已构架的皮肤系统进行任何修改。对于不同皮肤控件 共享的皮肤控件部分,可将共享部分作为单独的公共控件,供有需要的不同皮 肤控件使用,无需各自独立描述和创建。这样,不仅能减少皮肤控件的设置数 量,有效减少对系统资源的占用,还能提高皮肤系统的运行效率。2) 对于不同皮肤控件共同关联同一图像文件的情况,本发明通过设置皮肤控件与已加载图像数据之间映射表的方式,在加载任何图像数据之前,先查找 映射表中是否已有相应图像数据,如果已有,只需将图像数据的位置指针反馈给相应皮肤控件,如此可避免重复加载;而且,需要对图像数据进行操作时, 只需对映射表中指向的图像数据操作,不仅有效减少了对系统资源的占用;而 且加快了系统的处理速度。3) 本发明中,对于所有的皮肤控件包括皮肤系统提供的和动态扩展的,均 由皮肤控件管理器统一管理、统一创建生成,不仅能降低处理的复杂度,还能 使皮肤系统适用于各种应用环境,尤其是轻量级的简单应用环境。4) 为了进一步减少皮肤控件和图像文件的数量,本发明还提供了一些皮肤 控件对齐策略和图像变形绘制策略,如此,可以方便地描述复杂皮肤控件的属 性,使其发生变化时,不必通过复杂的操作进行处理。例如预先设置皮肤控 件的对齐方式中包括四周对齐,设置图像的绘制方式包括四角固定绘制、中部 水平垂直延展绘制,那么,对于一个充满窗口的圆角矩形皮肤控件,可设置其对齐方式的属性为四周对齐, 图像绘制方式的属性为四角固定绘制,中部水平垂直延展绘展, 这样, 无论此圆角矩形皮肤控件大小如何变化,都不用将原皮肤控件再切分为若干个小皮肤控件进行处理,在处理速度和资源占用上均优于 现有技术的处理方式。


图1为本发明皮肤系统的组成结构示意图;图2为各基本控件以及皮肤控件管理器之间的关系图; 图3为本发明皮肤控件创建流程的示意图; 图4为一要创建的皮肤控件实例示意图; 图5为图像文件加载流程的示意图。
具体实施方式
本发明的基本思想是提供一系列基本控件和一个皮肤控件管理器,用户 在使用包括基本控件和皮肤控件管理器的皮肤系统创建应用程序时,可直接使 用所提供的基本控件,也可基于所提供的基本控件任意动态创建自己所需的皮 肤控件。其中,基本控件包括提供接口的基类控件、设置参数的参数类、提供控制 特性的控件类、作为公共元素的公共控件等。为避免图像文件重复加载,本发明可进一步设置皮肤控件与已加载图像数 据之间的映射表,在加载任何图像数据之前,先根据图像文件名查找映射表中 是否已有相应图像数据,如果已有,只需将图像数据的位置指针反馈给相应皮 肤控件,不再重新加载。进一步的,本发明还可以设置皮肤控件对齐策略和图像变形绘制策略,以 简化皮肤变化时的处理。本发明所述的皮肤系统如图1所示,包括皮肤控件管理器、 一个以上基本 控件以及XML解析器;其中,皮肤控件管理器用于管理所有皮肤控件,负责 从XML解析器中读取解析后的XML配置文件中的相关配置信息并创建所需皮 肤控件;基本控件由皮肤系统本身提供,用于在用户使用皮肤系统创建应用程 序时直接使用、或作为基本皮肤控件创建用户所需的皮肤控件;XML解析器, 与皮肤控件管理器连接,负责读取XML配置文件并对其中的内容进行解析, 所解析出的内容提供给皮肤控件管理器调用并读取,皮肤控件管理器根据解析出的内容创建用户所需的皮肤控件、以及管理所有的皮肤控件。其中,所述XML 配置文件也称为皮肤描述文件。所述皮肤控件管理器根据功能可进一步划分为皮肤控件管理单元、皮肤控件创建单元、配置信息读取单元;皮肤控件管理单元用于管理所有皮肤控件;配置信息读取单元负责从XML解析器中读取解析后的配置信息,并将读取的配置信息发送给皮肤控件创建单元和皮肤控件管理单元;皮肤控件创建单元, 根据收到的配置信息创建用户所需的皮肤控件。所述基本控件包括提供接口的基类控件、设置参数的参数类、提供控制特 性的控件类、作为公共元素的公共控件,图2给出了各基本控件以及皮肤控件管理器之间的关系,如图2所示用于提供一系列接口给扩展使用的基类控件,如CQPObject、 CQPCommon-Object、 CQPWnd,这些基类本身 一般不实现特定功能,只是提供了接口,提供 给派生类使用。用于设置参数的参数类,如CxxxParams,这些参数类可设置创建相关皮肤 控件时所需的参数,在皮肤控件创建前先实例化相关的参数类,并对其中的参 数进行赋值。所有参数类都从CQPObjectParams继承,设置皮肤控件所关联的 各种属性,所述参数类实现以下接口准备参数PrepareParams,派生类需要实 现此接口,用于创建正确的参数类指针;设置参数SetParams,用于实现属性名 称和属性值的对应,皮肤控件管理器会在创建皮肤控件时调用此接口,为皮肤 控件设置正确的参数值。在实现此接口时,必须调用父类的相应函数,以保证 父类成员也可以正确设置。用于提供控制特性的控件类,如CQPSkinElement,派生于CQPWnd和 CWnd,即同时具备Windows窗口和CQPObject的特性,用于实现大多数绘图 及控制相关的内容,用户需创建的皮肤控件必须从CQPSkinElement中继承。 在CQPSkinElement中提供有以下接口及其缺省的实现创建Create,皮肤控件管理器在创建皮肤控件时会调用,该接口根据对应 的参数创建一个皮肤控件。获取参数GetParams,用于获取相应皮肤控件所关联的参数类的指针。绘制背景DrawBackgroimd,可通过改写绘制特有的背景,缺省的实现是使 用控件关联的图片来绘制背景,在继承类中可以通过改写绘制特有的背景。绘制前景Drawltem,在继承类中可通过改写绘制特有的前景。设置绘制区域SetDrawRegion,如果在XML配置文件中皮肤控件的 ClipRegion属性有效,表示皮肤控件的图片包含透明区域,该接口会在控件大 小改变时调用,负责计算皮肤控件有效的区域,并通过调用其它接口设置所计 算的皮肤控件有效区域。子控件布局LayoutElements,负责对各个子皮肤控件进行布局,是皮肤控 件的核心,其中包含了对自身的递归调用。此接口中,通过各个皮肤控件的位 置、大小等的属性,例如Gaps、 Width、 Height、 Align等,来计算皮肤控件的 大小及其所在位置并放置皮肤控件。查找关联元素SearchAttachElements,负责将在XML配置文件中设置的皮 肤控件的子皮肤控件与皮肤控件的成员变量关联。初始化元素InitElements,负责在皮肤控件创建完成后进行一些初始化的工 作,例如对皮肤控件的成员变量设置正确的初始值等。作为公共元素的公共控件,如CQPSkinFont,这些公共控件可以被某些控 件类作为参数使用。这些控件在实现上与控件类类似,只是公共控件被多个皮 肤控件所复用。所述皮肤控件管理器还可以包括图像加载管理单元,用于控制图像文件是 否加载;策略设置单元,用于设置皮肤控件对齐策略和图像变形绘制策略。基于上述基本控件,用户可以自行设置皮肤控件类型,并根据应用的需要 来实现皮肤控件的相应功能,用户自行设置皮肤控件时只需实现相应的接口 , 并增加到皮肤控件管理器的相关映射表中,皮肤控件管理器即可自动完成对这 些皮肤控件的管理。这里,所述相关映射表指皮肤控件ID到其创建函数指针、 皮肤控件类型到其创建函数指针这两个映射表,皮肤控件管理器会从这两个映 射表中查找相应皮肤控件的创建函数指针,并创建相应皮肤控件。并且,由于用户自行设置的皮肤控件实现了上面所述的接口,因此,皮肤控件管理器通过 相关的接口即可对相应皮肤控件自动进行管理。本发明中,动态创建所需皮肤控件的过程如图3所示,包括以下步骤 步骤301:皮肤控件管理器从XML配置文件中读取配置信息; 这里,所述XML配置文件通常放置在硬盘中用户应用程序相关的目录下, XML配置文件的内容由用户输入,是用户在编写应用程序时对自身程序界面如 何表现的设计,例如设置有哪些按钮,按钮上是什么图片之类等,并釆用皮 肤系统规定的格式进行描述。所述配置信息包括要创建的皮肤控件的标识(ID)、皮肤控件类型以及皮肤控件的各种属性。步骤302-303:根据皮肤控件的ID查找创建函数,判断是否找到创建函 数,如果找到,则直接执行步骤306;否则,执行步骤304。步骤304 305:根据要创建的皮肤控件类型査找创建函数,判断是否找到 创建函数,如果找到,则直接执行步骤306;否则,未找到创建函数,报错并 结東当前处理流程。这里,用户可以设置一类皮肤控件,例如一种按钮皮肤控件,由于所有按 钮皮肤控件都使用相同的方式创建,这种情况下,创建按钮皮肤控件时就会使 用皮肤控件类型(即按钮)进行查找;如果用户为某一个按钮如按钮A进行了 定制,即按钮A与其它按钮有不同的地方,那么,用户需要为按钮A单独设置 一个皮肤控件,虽然此皮肤控件的类型仍是按钮,但只在创建按钮A时会使用 皮肤控件的ID查找,创建其它按钮时仍使用通用的按钮皮肤控件。本发明中采用维护控件创建指针的方法创建各种皮肤控件,所有的控件类 中都包含了创建自身的静态函数。在皮肤控件管理器中维护有两个映射表 (map),分别是皮肤控件ID到其创建函数指针的映射、以及皮肤控件类型 到其创建函数指针的映射,基于所设置的两个映射表,可以根据控件类型或控 件ID来找到相应的创建函数,进而正确创建控件。用户通过皮肤控件管理器对 上述映射表进行初始化,所述初始化就是设置好皮肤控件ID与创建函数的对应 关系、以及皮肤控件类型与创建函数的对应关系。步骤306:皮肤控件管理器调用找到的创建函数实例化皮肤控件。本步骤中,由于前面已获取到皮肤控件的创建函数指针,创建函数指针的 作用就是实例化一个皮肤控件,因此,皮肤控件管理器可通过所获得的指针直 接调用创建函数,完成对皮肤控件的实例化。步骤307:皮肤控件管理器根据所提供的基本控件获得皮肤控件的参数对 象指针。这里,之所以要获取参数对象指针,原因是在实例化一个皮肤控件之后, 要有正确的参数才能真正创建相应的皮肤控件。 一般,皮肤控件所涉及的参数 也在XML配置文件中设置,且不同的皮肤控件类对应的参数不同。由于参数 变化是很普遍的,为了更好的支持扩展,不应一发生参数变化就直接修改皮肤 控件管理器中的代码,皮肤控件管理器不需要知道每个皮肤控件有哪些参数, 只要按照统一的方式来创建皮肤控件即可。因此,皮肤系统为每个皮肤控件类 都设置了相应的参数类,皮肤控件管理器只需得到相应的参数类,并将参数设 置进去就可以了 ,皮肤控件类在创建自身时直接使用这些参数。步骤308:从XML配置文件中读入皮肤控件关联的属性,配置参数对象。 步骤309:根据配置的参数实际创建所需的皮肤控件,即创建相应的窗口。 步骤310:如果需要创建子皮肤控件,可通过递归方式创建步骤309所创 建的皮肤控件的子皮肤控件,并将创建的子皮肤控件加入到相应的子皮肤控件 列表中。需要说明的是并非每个皮肤控件都需要创建子皮肤控件, 一个皮肤控件 可以有子皮肤控件也可以没有,是否具有子皮肤控件是用户在XML配置文件 中设置好的,皮肤控件管理器通过读取的配置信息可以获知是否需要创建子皮 肤控件。另外,每个皮肤控件都会维护自身的子皮肤控件列表,如果相应皮肤 控件没有子皮肤控件,则相应列表为空,列表的内容就是子皮肤控件的指针。举个具体例子来说明图3所述创建皮肤控件的过程,图4为一个播放器的 标题栏部分,如图4所示,该标题栏部分包括若干个皮肤控件最下层的一个 静态(STATIC)皮肤控件,上面的几个按钮皮肤控件,包括关闭、最大化、最13小化等按钮,中间的一个标签(LABEL)控件等。在XML配置文件中,分别对每个皮肤控件的不同属性进行了详细描述, 包括标识(ID)、类型、图像模式、绘制方式、对齐方式、高度(Height)、间 距(Gap)、文本等等。那么,在创建过程中,皮肤控件管理器先在映射表中查找皮肤控件ID为 CaptionFrame的创建函数,如果没找到,则查找皮肤控件类型为StaticControl 的创建函数,然后使用所找到的创建函数实例化一个皮肤控件;接着,通过调用GetParams接口获取该皮肤控件的参数类指针,再调用参 数类的SetParams接口,将XML配置文件中所设置的参数设置到参数类中,如 对静态皮肤控件设置的BgType="Bitmap"、 Image="STATIC—CAPTION—ACT.BMP"、 Draw ="Stretch"、 Align="TopHStretch"、 Height="22"、 NcHitTest="HTCAPTION" 、 AcceptDblClk= "True",完成对皮肤控件的参数配置;之后,调用基本控件中的Create接口创建所需的皮肤控件,即创建相应的 窗口;最后,由于CaptionFrame有子皮肤控件,所以按照上述流程递归创建每个 子皮肤控件,如本例中的SysColoseBtn等,并将子皮肤控件加入到子皮肤控件 列表中。在创建子皮肤控件时会重复上述过程,本例子中,子皮肤控件没有再 包括子皮肤控件,这时,相应子皮肤控件中的子皮肤控件列表就为空。在进行图像文件加载时,本发明所采用的图像文件管理方法如图5所示, 包括以下步骤步骤501:创建皮肤控件时,读入与所创建皮肤控件相关联的图像文件名。步骤502:根据图像文件名在映射表中査找图像数据;这里,所述映射表为皮肤控件与已加载图像数据之间的对应关系表,每次 当新的图像数据被加载后,会在映射表中增加新的映射表项,给出皮肤控件与 图像数据之间的对应关系,以方便后续査找。步骤503 - 505:判断是否找到所需的图像数据,如果找到,说明相应图像 数据已加载过,只需将相应图像数据的指针反馈给当前要创建的皮肤控件,并将指针保存在当前要创建的皮肤控件的成员变量中;否则,说明相应图像数据 未加载过,则分配相应图像数据所需的资源,加载相应图像数据,并在映射表 中增加该图像文件名到图像数据的映射项。这里,所述指针为相应图像数据所加载位置的地址,皮肤控件在需要相应 图像数据时,直接到指定位置获取即可。基于图5给出的流程,就可以在多个皮肤控件复用同一图像数据时,只加 载一次所需的图像数据,无需多次重复加载,占用系统资源。并且,在需要对 所有图像数据进行操作时,比如对所有图像数据改变颜色,可直接对映射表对 应的图像数据进行操作,如此可大大加快处理速度,提供处理效率。为减少皮肤控件和图像文件的数量,本发明皮肤系统的实现方法还可以预 先设置皮肤控件对齐方式的策略以及图像变形绘制的策略,具体的,皮肤控件 对齐方式的设置如表一所示,图像变形绘制的设置如表二所示。对齐方式说明Left靠左对齐Right靠右对齐Top靠上对齐Bottom靠下对齐Client四周对齐BottomRight右下角停放,这种对齐方式的控件与兄弟控件可以重合LeftVStretch靠左对齐,垂直延展RightVStretch靠右对齐,垂直延展TopHStretch靠上对齐,水平延展BottomHStretch靠下对齐,水平延展表一绘制方式说明Tile模板绘制Stretch延展绘制VFrame垂直框架,上下两端固定绘制,中部垂直延展绘制HFrame水平框架,左右两端固定绘制,中部水平延展绘制Frame框架,四角固定绘制,中部水平垂直延展绘制表二基于表一、表二的设置,可以方便地描述较为复杂的皮肤控件,例如对于充满窗口圆角矩形皮肤控件,在描述时可将其对齐方式设置为Client,绘制 方式设置为Frame,这样,当圆角矩形皮肤控件需要延展时,不需要将圆角矩 形皮肤控件切分为四个圆角和中间部分几个小皮肤控件,并分别对不同的小皮 肤控件进行扩展或不扩展的处理,而只需按描述的属性完成延展变化即可。由于某些皮肤控件是被多个皮肤控件共用的,这样,可以设置公共控件设 置区,在此区域内可声明某个皮肤控件为公共控件,公共控件可提供给需要公 共控件的皮肤控件所引用。设置为公共控件的包括字体皮肤控件、位图字体 皮肤控件、区域皮肤控件、滚动条皮肤控件等等。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1、一种可扩展的皮肤系统,其特征在于,该系统包括皮肤控件管理器、一个以上基本控件以及XML解析器;其中,皮肤控件管理器,用于管理所有皮肤控件,负责从XML解析器中读取解析后的XML配置文件中的相关配置信息并创建所需皮肤控件;基本控件,用于在用户使用皮肤系统创建应用程序时直接使用、或作为基本皮肤控件创建用户所需的皮肤控件;XML解析器,负责读取并解析XML配置文件,将解析后的内容提供给皮肤控件管理器调用并读取。
2、 根据权利要求l所述的皮肤系统,其特征在于,所述皮肤控件管理器进 一步包括皮肤控件管理单元、皮肤控件创建单元、配置信息读取单元;其中,皮肤控件管理单元,用于管理所有皮肤控件;配置信息读取单元,负责从XML解析器中读取解析后的配置信息,并将读取的配置信息发送给皮肤控件创建单元和皮肤控件管理单元;皮肤控件创建单元,根据收到的配置信息创建用户所需的皮肤控件。
3、 根据权利要求l所述的皮肤系统,其特征在于,所述基本控件包括提供接口的基类控件、设置参数的参数类、提供控制特性的控件类以及作为公共元 素的公共控件。
4、 根据权利要求l、 2或3所述的皮肤系统,其特征在于,所述皮肤控件 管理器还包括皮肤控件ID到其创建函数指针的映射表、以及皮肤控件类型到其 创建函数指针的映射表。
5、 根据权利要求l、 2或3所述的皮肤系统,其特征在于,所述皮肤控件 管理器还包括图像加载管理单元,用于控制图像文件是否加载。
6、 根据权利要求l、 2或3所述的皮肤系统,其特征在于,所述皮肤控件 管理器还包括策略设置单元,用于设置皮肤控件对齐策略和图像变形绘制策略。
7、 一种可扩展皮肤系统的实现方法,其特征在于,提供一个以上基本控件,该方法还包括A、 从XML配置文件中读取配置信息,根据所读取的配置信息查找创建函 数,如果找到,则执行步骤B,否则结東当前处理流程;B、 调用所找到的创建函数实例化皮肤控件,并根据基本控件获得皮肤控 件的参数对象指针;C、 从XML配置文件中读入皮肤控件关联的属性,配置参数对象,根据配 置的参数创建所需的皮肤控件。
8、 根据权利要求7所述的实现方法,其特征在于,步骤C之后,该方法 进一步包括通过递归方式创建步骤C所创建的皮肤控件的子皮肤控件,并将创建的子皮肤控件加入到相应的子皮肤控件列表中。
9、 根据权利要求7或8所述的实现方法,其特征在于,所述基本控件包括 提供接口的基类控件、设置参数的参数类、提供控制特性的控件类以及作为公 共元素的公共控件。
10、 根据权利要求7或8所述的实现方法,其特征在于,该方法进一步包 括在皮肤控件管理器中设置皮肤控件ID到其创建函数指针的映射表、以及皮 肤控件类型到其创建函数指针的映射表;步骤A所述査找创建函数为根据所设置的映射表进行查找。
11、 根据权利要求IO所述的实现方法,其特征在于,图像文件加载时,该 方法还包括a. 读入与所创建皮肤控件相关联的图像文件名;b. 根据图像文件名在所述映射表中查找图像数据;c. 判断是否找到所需的图像数据,如果找到,则将相应图像数据的指针反 馈给当前要创建的皮肤控件,并将指针保存在当前要创建的皮肤控件的成员变 量中;否则,分配相应图像数据所需的资源,加载相应图像数据,并在映射表 中增加所述图像文件名到图像数据的映射项。
12、 根据权利要求7或8所述的实现方法,其特征在于,该方法还包括 预先设置皮肤控件对齐方式的策略以及图像变形绘制的策略。
全文摘要
本发明公开了一种可扩展的皮肤系统,包括皮肤控件管理器,用于管理所有皮肤控件,负责从XML解析器中读取解析后的XML配置文件中的相关配置信息并创建所需皮肤控件;基本控件,用于在用户使用皮肤系统创建应用程序时直接使用、或作为基本皮肤控件创建用户所需的皮肤控件;XML解析器,负责读取并解析XML配置文件,将解析后的内容提供给皮肤控件管理器调用并读取。本发明还公开了一种可扩展皮肤系统的实现方法,提供一个以上基本控件,并基于提供的基本控件创建所需的皮肤控件。采用本发明能在系统资源占用尽量少的基础上,实现皮肤控件的任意扩展。
文档编号G06F9/44GK101256490SQ20081008433
公开日2008年9月3日 申请日期2008年3月18日 优先权日2008年3月18日
发明者吴运声 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1