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

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

Info

Publication number
CN100549952C
CN100549952C CNB2008100843331A CN200810084333A CN100549952C CN 100549952 C CN100549952 C CN 100549952C CN B2008100843331 A CNB2008100843331 A CN B2008100843331A CN 200810084333 A CN200810084333 A CN 200810084333A CN 100549952 C CN100549952 C CN 100549952C
Authority
CN
China
Prior art keywords
control
skin
skin control
parameter
basic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CNB2008100843331A
Other languages
English (en)
Other versions
CN101256490A (zh
Inventor
吴运声
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CNB2008100843331A priority Critical patent/CN100549952C/zh
Publication of CN101256490A publication Critical patent/CN101256490A/zh
Application granted granted Critical
Publication of CN100549952C publication Critical patent/CN100549952C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本发明公开了一种可扩展的皮肤系统,包括:皮肤控件管理器,用于管理所有皮肤控件,负责从XML解析器中读取解析后的XML配置文件中的相关配置信息并创建所需皮肤控件;基本控件,用于在用户使用皮肤系统创建应用程序时直接使用、或作为基本皮肤控件创建用户所需的皮肤控件;XML解析器,负责读取并解析XML配置文件,将解析后的内容提供给皮肤控件管理器调用并读取。本发明还公开了一种可扩展皮肤系统的实现方法,提供一个以上基本控件,并基于提供的基本控件创建所需的皮肤控件。采用本发明能在系统资源占用尽量少的基础上,实现皮肤控件的任意扩展。

Description

一种可扩展的皮肤系统及其实现方法
技术领域
本发明涉及皮肤技术,特别是涉及一种可扩展的皮肤系统及其实现方法。
背景技术
通常,软件运行时都会有交互界面,以便于接受用户指令并向用户反馈信息,交互界面的好坏是一个软件是否被用户接受的重要因素。现有的许多软件都使用皮肤系统来优化交互界面的表现,传统的皮肤系统主要有两种发展方向:一种是追求完备,在实现皮肤系统过程中不注重系统资源优化,导致皮肤系统相当庞大;另一种是皮肤系统与软件内部逻辑耦合很好,皮肤系统占用资源不高,但难以扩展。
随着计算机处理能力的提高以及交互界面不断发展的需要,皮肤系统的架构也在不断发展,总体上可分为三种方案:在代码中定义皮肤相关元素、使用INI文件定义少量皮肤元素属性、使用扩展标记语言(XML)或相关可扩展标识语言描述各种皮肤元素属性及行为。其中,由于前两种方案在其描述能力和可扩展性上都存在较大的局限性,在现代皮肤系统设计中很少采用,因此下面主要对第三种方案的相关现有技术进行说明。
一般,皮肤系统需要提供以下内容:一组已实现的皮肤控件、一组与已实现皮肤控件相关联的图像文件、一组皮肤系统的对外接口、一种描述皮肤系统相关属性与行为的标识语言。其中,皮肤控件也可称为皮肤组件或皮肤元素,对外接口就是指外部应用编程接口(API)。
在现有的皮肤系统中,一种皮肤系统仅实现与特定应用相关的一些皮肤控件,另一种皮肤系统则实现尽可能多的皮肤控件,两种系统都会提供相应皮肤控件的名称关键字和属性关键字,用户在皮肤描述文件中必须使用所提供的关键字来描述皮肤控件,不能对皮肤控件进行扩展。
现有的皮肤系统通常将皮肤控件与对应的图像文件进行一对一的关联,在创建皮肤控件时,每个皮肤控件都会加载其所关联的图像文件,然后根据属性定义对皮肤控件进行绘制,其中,皮肤控件关联的图像文件宽高与皮肤控件自身的宽高需要保持一致,才能保证正确绘制。对于个别需要在程序运行中变形的皮肤控件,其所关联的图像文件会具有水平或垂直延展的属性定义,但对于复杂的四周延展或透明区域定义,则不能提供相关的属性,而必须在图像文件设计时进行切割,分成更小的皮肤控件单元进行处理。比如:对于一个可变形的、圆角矩形形状的皮肤控件,它在变形过程中四个角保持不变,但四条边以及矩形中部都会进行相关的延展。那么,现有皮肤系统的处理方法通常是将该皮肤控件的四个角单独切分成四个独立的小皮肤控件,这些小皮肤控件不可延展;而其他部分定义为另一个小皮肤控件,该小皮肤控件可以作某种方向上的延展。
现有皮肤系统中,皮肤描述文件中所描述的各个皮肤控件基本是相互独立的,各个皮肤控件之间不对其他皮肤控件进行复用。比如:在现有系统中,一个窗口皮肤控件和一个列表皮肤控件都需要用到滚动条皮肤控件,但在皮肤描述文件中需要在描述窗口皮肤控件和描述列表皮肤控件时都描述滚动条皮肤控件的属性,且在创建时也各自独立创建。
从上述描述可以看出,现有皮肤系统在实际应用中存在以下问题:
第一、用户不能根据自身需要方便地扩展皮肤控件,因此,对于那些只提供应用相关皮肤控件的皮肤系统,其应用范围非常狭窄;而对于那些提供完备皮肤控件的皮肤系统,则非常庞大、复杂,不适合于轻量级简单的应用环境。
第二、如果多个皮肤控件关联到同一个图像文件,由于每个皮肤控件创建时都会独立加载图像文件,那么,同一个图像文件将会被加载多次,会重复占用更多的系统资源,导致系统资源的浪费。
第三、现有皮肤系统图像文件在加载图像后所做得变换很少,因此对于一些需要特殊变化的皮肤控件需要进行切分,分成若干个行为更加单一的皮肤控件,如此,不仅增加了系统资源的占用,还增加了处理的复杂度。
第四、当多个控件使用相同的皮肤控件作为它的一部分时,独立描述与创建相同的皮肤控件,也将导致更多的系统资源占用。
发明内容
有鉴于此,本发明的主要目的在于提供一种可扩展的皮肤系统及其实现方法,能在系统资源占用尽量少的基础上,实现皮肤控件的任意扩展。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种可扩展的皮肤系统,包括:皮肤控件管理器、一个以上基本控件以及XML解析器;其中,
皮肤控件管理器,包括用于管理所有皮肤控件的皮肤控件管理单元;根据收到的配置信息创建用户所需皮肤控件的皮肤控件创建单元;负责从XML解析器中读取解析后的XML配置文件中的相关配置信息,并将所读取配置信息发送给皮肤控件创建单元和皮肤控件管理单元的配置信息读取单元;以及皮肤控件ID到其创建函数指针的映射表、皮肤控件类型到其创建函数指针的映射表;
基本控件,用于在用户使用皮肤系统创建应用程序时直接使用、或作为基本皮肤控件创建用户所需的皮肤控件;所述基本控件包括提供接口的基类控件、设置参数的参数类、提供控制特性的控件类以及作为公共元素的公共控件;
XML解析器,负责读取并解析XML配置文件,将解析后的内容提供给皮肤控件管理器调用并读取。
上述方案中,所述皮肤控件管理器还包括图像加载管理单元,用于控制图像文件是否加载。
上述方案中,所述皮肤控件管理器还包括策略设置单元,用于设置皮肤控件对齐策略和图像变形绘制策略。
本发明还提供了一种可扩展皮肤系统的实现方法,包括:提供一个以上基本控件,并设置皮肤控件ID到其创建函数指针的映射表、以及皮肤控件类型到其创建函数指针的映射表;该方法还包括:
A、从XML配置文件中读取配置信息,根据所读取的配置信息及所设置的映射表查找创建函数,如果找到,则执行步骤B,否则结束当前处理流程;
B、调用所找到的创建函数实例化皮肤控件,并根据基本控件获得皮肤控件的参数对象指针;其中,所述基本控件包括提供接口的基类控件、设置参数的参数类、提供控制特性的控件类以及作为公共元素的公共控件;
C、从XML配置文件中读入皮肤控件关联的属性,配置参数对象,根据配置的参数创建所需的皮肤控件。
其中,步骤C之后,该方法进一步包括:通过递归方式创建步骤C所创建的皮肤控件的子皮肤控件,并将创建的子皮肤控件加入到相应的子皮肤控件列表中。
上述方案中,图像文件加载时,该方法还包括:
a.读入与所创建皮肤控件相关联的图像文件名;
b.根据图像文件名在所述映射表中查找图像数据;
c.判断是否找到所需的图像数据,如果找到,则将相应图像数据的指针反馈给当前要创建的皮肤控件,并将指针保存在当前要创建的皮肤控件的成员变量中;否则,分配相应图像数据所需的资源,加载相应图像数据,并在映射表中增加所述图像文件名到图像数据的映射项。
上述方案中,该方法还包括:预先设置皮肤控件对齐方式的策略以及图像变形绘制的策略。
本发明所提供的可扩展的皮肤系统及其实现方法,具有以下的优点和特点:
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,用于获取相应皮肤控件所关联的参数类的指针。
绘制背景DrawBackground,可通过改写绘制特有的背景,缺省的实现是使用控件关联的图片来绘制背景,在继承类中可以通过改写绘制特有的背景。
绘制前景DrawItem,在继承类中可通过改写绘制特有的前景。
设置绘制区域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)皮肤控件,上面的几个按钮皮肤控件,包括关闭、最大化、最小化等按钮,中间的一个标签(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,这样,当圆角矩形皮肤控件需要延展时,不需要将圆角矩形皮肤控件切分为四个圆角和中间部分几个小皮肤控件,并分别对不同的小皮肤控件进行扩展或不扩展的处理,而只需按描述的属性完成延展变化即可。
由于某些皮肤控件是被多个皮肤控件共用的,这样,可以设置公共控件设置区,在此区域内可声明某个皮肤控件为公共控件,公共控件可提供给需要公共控件的皮肤控件所引用。设置为公共控件的包括:字体皮肤控件、位图字体皮肤控件、区域皮肤控件、滚动条皮肤控件等等。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

Claims (7)

1、一种可扩展的皮肤系统,其特征在于,该系统包括:皮肤控件管理器、一个以上基本控件以及XML解析器;其中,
皮肤控件管理器,包括用于管理所有皮肤控件的皮肤控件管理单元;根据收到的配置信息创建用户所需皮肤控件的皮肤控件创建单元;负责从XML解析器中读取解析后的XML配置文件中的相关配置信息,并将所读取配置信息发送给皮肤控件创建单元和皮肤控件管理单元的配置信息读取单元;以及皮肤控件ID到其创建函数指针的映射表、皮肤控件类型到其创建函数指针的映射表;
基本控件,用于在用户使用皮肤系统创建应用程序时直接使用、或作为基本皮肤控件创建用户所需的皮肤控件;所述基本控件包括提供接口的基类控件、设置参数的参数类、提供控制特性的控件类以及作为公共元素的公共控件;
XML解析器,负责读取并解析XML配置文件,将解析后的内容提供给皮肤控件管理器调用并读取。
2、根据权利要求1所述的皮肤系统,其特征在于,所述皮肤控件管理器还包括图像加载管理单元,用于控制图像文件是否加载。
3、根据权利要求1所述的皮肤系统,其特征在于,所述皮肤控件管理器还包括策略设置单元,用于设置皮肤控件对齐策略和图像变形绘制策略。
4、一种可扩展皮肤系统的实现方法,其特征在于,提供一个以上基本控件,并设置皮肤控件ID到其创建函数指针的映射表、以及皮肤控件类型到其创建函数指针的映射表;该方法还包括:
A、从XML配置文件中读取配置信息,根据所读取的配置信息及所设置的映射表查找创建函数,如果找到,则执行步骤B,否则结束当前处理流程;
B、调用所找到的创建函数实例化皮肤控件,并根据基本控件获得皮肤控件的参数对象指针;其中,所述基本控件包括提供接口的基类控件、设置参数的参数类、提供控制特性的控件类以及作为公共元素的公共控件;
C、从XML配置文件中读入皮肤控件关联的属性,配置参数对象,根据配置的参数创建所需的皮肤控件。
5、根据权利要求4所述的实现方法,其特征在于,步骤C之后,该方法进一步包括:通过递归方式创建步骤C所创建的皮肤控件的子皮肤控件,并将创建的子皮肤控件加入到相应的子皮肤控件列表中。
6、根据权利要求4或5所述的实现方法,其特征在于,图像文件加载时,该方法还包括:
a.读入与所创建皮肤控件相关联的图像文件名;
b.根据图像文件名在所述映射表中查找图像数据;
c.判断是否找到所需的图像数据,如果找到,则将相应图像数据的指针反馈给当前要创建的皮肤控件,并将指针保存在当前要创建的皮肤控件的成员变量中;否则,分配相应图像数据所需的资源,加载相应图像数据,并在映射表中增加所述图像文件名到图像数据的映射项。
7、根据权利要求4或5所述的实现方法,其特征在于,该方法还包括:预先设置皮肤控件对齐方式的策略以及图像变形绘制的策略。
CNB2008100843331A 2008-03-18 2008-03-18 一种可扩展的皮肤系统及其实现方法 Active CN100549952C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2008100843331A CN100549952C (zh) 2008-03-18 2008-03-18 一种可扩展的皮肤系统及其实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2008100843331A CN100549952C (zh) 2008-03-18 2008-03-18 一种可扩展的皮肤系统及其实现方法

Publications (2)

Publication Number Publication Date
CN101256490A CN101256490A (zh) 2008-09-03
CN100549952C true CN100549952C (zh) 2009-10-14

Family

ID=39891337

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2008100843331A Active CN100549952C (zh) 2008-03-18 2008-03-18 一种可扩展的皮肤系统及其实现方法

Country Status (1)

Country Link
CN (1) CN100549952C (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102004633B (zh) * 2009-09-03 2013-04-24 阿里巴巴集团控股有限公司 一种处理控件属性的方法及装置
CN102193789B (zh) * 2010-03-17 2015-05-13 腾讯科技(深圳)有限公司 一种实现可配置跳转链接的方法和设备
CN102222354B (zh) * 2010-04-19 2013-07-17 腾讯科技(深圳)有限公司 一种图形界面的自动绘制方法及系统
CN102487361B (zh) * 2010-12-03 2014-08-20 腾讯科技(深圳)有限公司 一种复用列表页的方法和装置
CN102722411B (zh) * 2010-12-08 2014-09-24 浪潮软件股份有限公司 一种节省内存的纸娃娃系统
CN102810060B (zh) * 2011-06-01 2016-11-09 腾讯科技(深圳)有限公司 一种安致图片资源配置方法及装置
CN103176802B (zh) * 2013-03-29 2016-05-11 厦门亿联网络技术股份有限公司 通过控件池实现系统的用户界面ui与控件库分离的方法
CN103729214A (zh) * 2013-12-19 2014-04-16 北京像素软件科技股份有限公司 一种用户界面预览的方法
CN106155661B (zh) * 2015-04-14 2020-01-21 阿里巴巴集团控股有限公司 一种控件接入方法及装置
CN105183281B (zh) * 2015-08-28 2019-01-22 百度在线网络技术(北京)有限公司 信息处理方法及装置
CN105912467B (zh) * 2016-04-08 2021-05-11 腾讯科技(深圳)有限公司 一种性能测试方法及装置
CN106899892A (zh) * 2017-02-20 2017-06-27 维沃移动通信有限公司 一种在浏览器中进行视频播放的方法及移动终端
CN109144500B (zh) * 2018-07-30 2021-01-05 深圳点猫科技有限公司 一种基于图形化编程的皮肤文件处理方法及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1770098A (zh) * 2004-11-05 2006-05-10 腾讯科技(深圳)有限公司 一种动态皮肤的实现方法
CN1770097A (zh) * 2004-11-05 2006-05-10 腾讯科技(深圳)有限公司 一种用户交互界面系统及其扩展方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1770098A (zh) * 2004-11-05 2006-05-10 腾讯科技(深圳)有限公司 一种动态皮肤的实现方法
CN1770097A (zh) * 2004-11-05 2006-05-10 腾讯科技(深圳)有限公司 一种用户交互界面系统及其扩展方法

Also Published As

Publication number Publication date
CN101256490A (zh) 2008-09-03

Similar Documents

Publication Publication Date Title
CN100549952C (zh) 一种可扩展的皮肤系统及其实现方法
US7017118B1 (en) Method and apparatus for reordering data items
CN101676910B (zh) 一种面向Web应用系统的页面生成方法
US7669149B2 (en) Matching user interface elements to screen reader functions
US20060161836A1 (en) Method and apparatus for form automatic layout
US20110219321A1 (en) Web-based control using integrated control interface having dynamic hit zones
US7620890B2 (en) Presenting user interface elements to a screen reader using placeholders
CN104007967B (zh) 一种基于可扩展标记语言的用户界面生成方法和装置
CN101320365A (zh) 一种单据页面动态布局的方法及装置
CN110377285A (zh) 一种生成页面骨架屏的方法、装置及计算机设备
CN107203595A (zh) 一种基于自由表单的动态生成web界面的方法
US20150278190A1 (en) Web server system, dictionary system, dictionary call method, screen control display method, and demonstration application generation method
CN105955759A (zh) 一种用于Web开发的模板引擎实现方法
CN103164413A (zh) 动态扩展业务对象的方法和系统
CN103646023A (zh) 一种基于web的增加页面/控件的方法
US20050108681A1 (en) Method and system for applying user interface elements to data
CN105278961A (zh) 生成数据库表结构文档的方法及系统
CN111367514B (zh) 页面卡片的开发方法和装置、计算设备和存储介质
US20120079413A1 (en) Dynamic, set driven, ribbon, supporting deep merge
CN102262530A (zh) 一种基于生成式视框结构的云计算视窗桌面的架构方法
US8869048B2 (en) Declarative and multi-mode wizard framework
US20060150084A1 (en) Data format for representing user interface elements for a screen reader
CN110928540A (zh) 一种页面生成方法及装置
JP2001125855A (ja) 動的Webページ生成プログラム
CN112463141B (zh) 一种基于bpmn的微服务工作流部署方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant