首页> 中国专利> 一种嵌入式图形系统的多窗口管理器

一种嵌入式图形系统的多窗口管理器

摘要

本发明公开了一种用于嵌入式系统的多窗口管理系统和方法,所述系统包括:消息处理模块执行前端操作,用于处理用户消息并将窗口基本组件区域变化信息以脏区域队列方式输出;画面刷新模块执行后端操作,用于将传递来的脏区域队列解析,将组件最新区域信息输送至屏幕显示缓冲区,完成显示刷新。由于本发明采用分层的刷新方法和优化的脏区域队列算法,将刷新操作的运算量降到最低,并且支持窗口垃圾收集器,因此本发明具有较高的效率。又由于采用双缓冲的显示机制,避免了画面刷新时的闪屏问题,因此本发明具有较好的显示效果。

著录项

  • 公开/公告号CN101493751A

    专利类型发明专利

  • 公开/公告日2009-07-29

    原文格式PDF

  • 申请/专利权人 深圳市步科电气有限公司;

    申请/专利号CN200910037195.6

  • 发明设计人 董鹏云;马学童;池家武;

    申请日2009-02-09

  • 分类号G06F3/048(20060101);G06F9/44(20060101);

  • 代理机构44221 广东国欣律师事务所;

  • 代理人刘军

  • 地址 518057 广东省深圳市南山区科技中二路深圳软件园9栋702室

  • 入库时间 2023-12-17 22:18:57

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-29

    专利权的转移 IPC(主分类):G06F 3/048 专利号:ZL2009100371956 登记生效日:20220715 变更事项:专利权人 变更前权利人:深圳市步科电气有限公司 变更后权利人:上海步科自动化股份有限公司 变更事项:地址 变更前权利人:518057 广东省深圳市南山区科技中二路深圳软件园9栋702室 变更后权利人:200120 上海市浦东新区中国(上海)自由贸易试验区申江路5709号、秋月路26号3幢北侧三楼

    专利申请权、专利权的转移

  • 2011-01-19

    授权

    授权

  • 2009-09-23

    实质审查的生效

    实质审查的生效

  • 2009-07-29

    公开

    公开

说明书

技术领域

本发明涉及多窗口管理系统和方法,更具体地说,涉及嵌入式GUI(图形用户界面)的多窗口画面刷新方法和消息处理机制。

背景技术

具有WINDOWS风格的多窗口显示是一种流行的、受到广大用户欢迎的技术。由于交互性好,越来越多地在生产、生活等各种领域得到广泛应用。

现有技术中对于多窗口的管理,常采用类似X Window系统的C/S(客户端/服务器)体系架构,接收客户端发送的请求,响应用户对窗口的操作。

窗口管理系统定义了桌面上窗口的外观,并控制着如何操作和放置窗口,例如:打开、关闭、移动、调整大小、最小化,等等。还可能处理会话管理功能,比如如何将会话暂停、恢复、重启和结束。

窗口管理系统还控制着窗口装饰,也就是窗口的标题栏和边框。除了美学方面的考虑之外,通过改变窗口的装饰还能够改变它们的功能:即改变标题栏上按钮的数目和摆放。

窗口管理系统也负责管理窗口操作。也就是说,窗口管理系统,控制着X窗口系统环境中窗口的所有方面。

采用这种方式对多窗口进行管理,占用系统的资源多,效率低,实时性较差,并且需要操作系统和库的支持。更重要的是,现有技术中对于多窗口的管理并不适合在嵌入式系统中使用,因为现在流行的嵌入式系统在面向具体应用时,比如过程控制,有较强的实时性要求;而嵌入式系统本身资源较少,且不一定包含操作系统及所需的库文件,因此难以支撑现有窗口管理系统的应用与作用的发挥。

发明内容

本发明要解决的技术问题是提供一种嵌入式GUI系统的多窗口管理系统和方法,其具备一般窗口系统的功能,支持多个子窗口嵌套重叠,界面类似于Windows等经典窗口系统,包含桌面、任务栏、快捷菜单等经典窗口元素,使操作界面更友好。

本发明所述的一种多窗口管理系统,其可用于嵌入式系统,包括前端操作和后端操作:

消息处理模块执行前端操作,用于处理用户消息并将窗口基本组件区域变化信息以脏区域队列方式输出;

画面刷新模块执行后端操作,用于将传递来的脏区域队列解析,将组件最新区域信息输送至屏幕显示缓冲区,完成显示刷新。

本发明还提出了一种用于嵌入式系统的多窗口管理方法,其特征在于,包括前端操作和后端操作:

查询消息队列是否有输入消息,若有,调用消息处理模块处理该消息并将其列入脏区域队列;

接着,再查询消息队列是否空,如果不为空,就继续调用消息处理模块处理,直至遍历完消息队列;

由画面刷新模块查询脏区域队列,如果脏区域队列不为空,则进行画面刷新;直至脏区域队列为空时,则画面刷新完毕。

本发明具有与平台无关,不需要任何库的支持的特点,可方便地移植到各种软硬件系统,甚至可用于不含操作系统的平台,因此具有很好的移植性。

本发明所述多窗口管理系统能够提供打开、关闭、移动、最大化、最小化、缩放和焦点切换等基本窗口操作,及窗口半透明功能(只有后端操作,在画面刷新模块中完成),可以很方便地实现其他复杂窗口功能。如通过定时最小化、最大化切换,可实现窗口闪烁;通过定时移动微小距离,可实现窗口振动;通过定时半透明窗口(半透明值递增或递减),可实现窗口淡入淡出的效果。若有打印驱动的支持,可以方便地实现窗口打印和屏幕打印操作(打印数据已存储在窗口、屏幕显示缓冲区中)。因此本发明具有较好的扩展性。

附图说明

图1为本发明所述多窗口系统的基本组件示意图;

图2为本发明基本组件的组成示意图;

图3为屏幕坐标系、窗口坐标系示意图;

图4为显示缓冲区层次示意图;

图5为按钮按下时脏区域登记示意图;

图6为窗口移动时脏区域登记示意图;

图7为一个简单的窗口模型示例;

图8为图7窗口模型示例的结构简化示意图;

图9为一种窗口数据存储示意图;

图10为本发明所述的多窗口系统的结构示意图;

图11为脏区域队列优化流程图;

图12为窗口管理线程执行流程图;

图13为消息处理操作流程图;

图14为画面刷新操作流程图;

图15为窗口刷新操作流程图;

图16为屏幕刷新操作流程图;

图17为窗口显示缓冲区刷新流程图;

图18为屏幕显示缓冲区刷新流程图;

图19为元件显示缓冲区刷新窗口显示缓冲区示意图;

图20为窗口打开前端操作流程图;

图21为窗口关闭前端操作流程图;

图22为窗口移动前端操作流程图;

图23为窗口焦点切换前端操作流程图。

具体实施方式

图1为本发明所述多窗口系统的组件示意图。针对本发明的多窗口管理系统,可抽象出一些基本组件:显存、屏幕、窗口和功能元件,其中有:

显存:是由系统提供的显示缓冲区,与显示屏上的像素点一一对应,刷新显示缓冲区中的数据,就能改变显示屏上的显示内容,完成画面刷新。

屏幕:相当于一个在内存中的虚拟显存,并管理着当前所有打开的窗口,是窗口的载体。

窗口:是一组功能元件的集合,是元件的载体。其由背景、边框、标题栏及功能元件组成。可分为系统窗口(桌面、任务栏、快捷菜单、信息提示等窗口)和弹出窗口。

功能元件:包括静态显示(字符、图片等)、按钮、编辑框、滚动条、动画、显示列表以及自定义元件等。通过系统提供的定制接口,其他功能元件可以用基本元件定制实现。如下拉菜单,可以通过按钮和弹出窗口定制,单选框、复选框及进度条则可以通过按钮定制。功能元件可以关联一组数据,关联数据可从服务器端获取,也可从本地得到。通过关联数据,各功能元件之间就能相互通信,以完成各种复杂的逻辑。

图2为每个组件的具体组成示意图。其中公共数据包括:显示区域、显示缓冲区。

显示区域是组件在对应坐标系下的矩形区域。

显示缓冲区:存储组件当前的显示内容,按层次可分为元件显示缓冲区、窗口显示缓冲区、屏幕显示缓冲区和显存缓冲区。当画面刷新时,显示缓冲区按层次依次被刷新,最终显存缓冲区被刷新,这样就完成一次画面刷新操作。

脏区域队列:需要刷新的区域由脏区域队列提供。其记录了组件需要刷新的区域,刷新时,只更新显示缓冲区中对应的这些区域,以提高刷新效率。

从图2可以看出,屏幕显示缓冲区和显存缓冲区构成双缓冲显示模式,避免了刷新过程中显示屏的闪烁问题。

图3给出了屏幕坐标系与窗口坐标系之间关系的示意图,具体地说,元件的显示区域属于窗口坐标系;窗口的显示区域属于屏幕坐标系。屏幕和显存的显示区域一样,都对应显示屏的大小。

图4则为显示缓冲区层次示意图。所谓显示缓冲区,是指存储组件在当前的显示内容。按层次可分为元件显示缓冲区、窗口显示缓冲区、屏幕显示缓冲区和显存缓冲区。当画面刷新时,显示缓冲区按层次依次被刷新,最终显存缓冲区被刷新,这样就完成一次画面刷新操作。

当组件创建、隐藏、关闭时,或组件的显示内容、显示位置改变时,会将显示区域登记到下一层组件对象的脏区域队列中。结合图4的示意,元件显示区域就会被登记到窗口脏区域队列,窗口显示区域则会被登记到屏幕脏区域队列。

如图5所示,假设按钮B所显示的区域为X=Rb,窗口W的显示区域为Y=Rw,则Fy(x)为返回区域x在区域y所在坐标系下的区域,即R’b=F_Rw(Rb)。如图5所示,当按钮B被按下时,会将按钮区域登记到窗口W的脏区域队列,并将转化到屏幕S的按钮区域登记到屏幕脏区域队列。

如图6所示,假设窗口W移动前显示区域为Rw,移动后显示区域为R’w,当窗口移动时,会将移动前和移动后的窗口区域都登记到屏幕脏区域队列。

图7是一个简单窗口模型示意图,屏幕S上打开了窗口W1、W2、W3、W11、W12、W13和W121,其中,W1桌面,W2任务栏,W3快捷菜单是系统窗口,W11、W12、W13是W1的弹出子窗口,W121是W12的弹出子窗口。

图8是对应的结构简化示意图。

结合图2与图8,屏幕用来管理所有打开的窗口,维护系统窗口队列和弹出窗口队列。

系统窗口队列是根窗口队列,窗口遍历操作从这里开始执行。系统窗口包括桌面、任务栏、快捷菜单和信息提示等窗口。与Windows窗口系统类似,桌面窗口占据整个屏幕大小,弹出窗口在这里创建。

任务栏窗口显示弹出窗口的窗口图标,通过这些图标可以方便地将焦点切换到目标窗口以及最小化、最大化目标窗口。同时可显示CPU使用率、内存使用率等系统信息。快捷菜单窗口提供一些常用功能元件。信息提示窗口提示系统异常信息。

弹出窗口队列记录所有打开的弹出窗口。

窗口管理元件队列和弹出子窗口队列,元件队列记录执行相关功能的一组功能元件,子窗口队列按子窗口Z序记录当前窗口弹出的所有子窗口。

窗口属性包括:边框、背景、标题、透明度和窗口类型(垄断、跟随、顶层和底层等)。

垃圾收集器用于管理窗口生命期(从打开到关闭)内的动态内存使用,用户可以根据实际情况定制合适的垃圾收集器,提高内存管理效率,避免内存泄露、内存碎片等问题。

功能元件是执行具体功能的组件,如按钮可弹出窗口,编辑框可输入信息,滚动条可以在给定范围内改变数据,动画可以定时改变显示内容等等。

元件属性主要是功能参数,如弹出窗口号,可输入字符数,滚动范围等。界面显示指元件显示内容,主要是位图或字符等信息。

以上所述的窗口和元件数据(主要是显示区域、窗口属性、元件属性等)可以存储在闪存中,也可以在程序中生成。

图9是窗口数据存储的一个简单例子,窗口索引表是窗口数据的偏移表,元件索引表是元件数据的偏移表。

以上介绍了窗口系统的概念抽象和数据组织,下面将介绍本发明所述的多窗口管理系统的主要模块。

图10给出了本发明的一种用于嵌入式系统的多窗口管理系统,其可用于嵌入式系统,包括前端操作和后端操作:

消息处理模块执行前端操作,用于处理用户消息并将窗口基本组件区域变化信息以脏区域队列方式输出;

画面刷新模块执行后端操作,用于将传递来的脏区域队列解析,将组件最新区域信息输送至屏幕显示缓冲区,完成显示刷新。

本发明所述多窗口管理系统的特点是占用一个进程,所有窗口操作都在这个进程中完成,该进程执行一个循环操作。

本发明将窗口操作分为前端操作和后端操作两部分:

前端操作由消息处理模块来执行相关功能,其特点是运算量小,如窗口移动,只需改变窗口显示区域;切换窗口焦点,只需调整子窗口队列;由于前端操作执行时间很短,保证了相对固定的响应时间,因此实时性较高。

画面刷新模块执行后端操作,主要包括显示内容的刷新,其特点是运算量较大。后端操作主要是运算量较大的画面刷新操作,这两个模块通过脏区域队列进行衔接。

画面刷新模块采用分层的方式进行刷新操作,以提高刷新效率。如图4所示,组件的显示内容存储在组件显示缓冲区中,刷新时,根据脏区域队列依次刷新:即窗口显示缓冲区、屏幕显示缓冲区和显存缓冲区依次刷新,而元件显示缓冲区的刷新在前端部分,即消息处理模块中完成;当显存缓冲区被刷新后,就完成了一次画面刷新操作。因此画面刷新主要包括窗口显示缓冲区的刷新和屏幕显示缓冲区的刷新。

由于采用分层的刷新方法和优化的脏区域队列算法,将刷新操作的运算量降到最低,并且支持窗口垃圾收集器,因此本发明具有较高的效率。又由于采用双缓冲的显示机制,避免了画面刷新时的闪屏问题,因此本发明具有较好的显示效果。

消息处理模块用于输入消息,画面刷新模块则输出显示,因此,本发明多窗口管理系统进一步包括:

消息输入接口,例如鼠标、触控或按键等,消息输入接口将用户输入消息写入消息队列;

显示输出接口,例如显存或类似显存的。本发明将显示输出接口抽象为基本组件,通过与其他组件的交互,完成画面刷新操作。画面刷新是指当组件的显示内容改变时,在显示屏上同步显示出来。

可见,本发明所述多窗口管理器以用户消息为输入,以画面显示为输出,是消息驱动类型的窗口系统。

图11给出的是优化的脏区域队列算法,脏区域优化包括窗口脏区域优化和屏幕脏区域优化。

所谓窗口脏区域优化,即脏区域合并操作。假设登记区域R到脏区域队列Q,然后遍历脏区域队列Q,如果遍历完脏区域队列Q,则结束遍历;在未遍历完脏区域队列Q时,判断是否有区域重合,如果有,则合并重合区域后继续遍历;如果没有,则继续遍历。

所谓屏幕脏区域优化,具体说明如下:

在本发明中,因屏幕刷新涉及大量内存拷贝操作,因此优化屏幕脏区域队列显得尤为重要,可进一步提高刷新效率。主要采用如下思路:屏幕刷新操作前,尽可能地合并屏幕脏区域,去除重叠区域;而屏幕刷新时,计算当前窗口实际需拷贝的区域,并按该区域进行拷贝操作。具体算法如下:设RX是实际需拷贝的区域集,Rw是当前窗口区域,RS是合并后的屏幕脏区域集,RU是当前窗口的上层窗口区域集(隐藏窗口和半透明窗口除外),包括子窗口和上层兄弟窗口。则,RX=(Rw&RS)-RU即,目标窗口实际拷贝区域为,合并后的脏区域集与当前窗口区域的交集,减去上层窗口区域集。

图12为本发明所述多窗口管理的处理方法,如图12所示,首先查询消息队列是否有输入消息,若有,就取出一条消息,并调用消息处理模块处理该消息并将其列入脏区域队列,接着,再查询消息队列是否空,如果不为空,就继续调用消息处理模块处理。直至遍历完消息队列。

查询脏区域队列,如果脏区域队列不为空,则依次进行画面刷新;直至脏区域队列为空时,则画面刷新完毕。

当画面刷新完毕后,则重新开始下一轮的查询消息队列。

图13详细地给出了消息处理模块的处理流程。

从根窗口开始遍历子窗口队列,具体做法是:

从根窗口开始,分发和处理消息,先将消息按顺序分发给各子窗口处理,如果有子窗口处理成功,则消息处理完毕,否则消息将分发到当前窗口处理,先判断当前窗口是否隐藏,如果是隐藏,则返回“失败”;如果当前窗口不是隐藏的,则进一步判断消息是否在当前窗口区域?如果是在当前窗口区域,则遍历元件队列并处理消息,返回“成功”,如果不是在当前窗口区域,则返回“失败”。

消息处理过程中,一旦消息被某个窗口成功处理,则消息处理完毕。否则继续将消息分发给其他窗口,直到遍历完所有窗口。

图14用于说明画面刷新的基本步骤:主要包括:遍历系统窗口队列并刷新窗口,以及遍历系统窗口队列并刷新屏幕,根据屏幕脏区域队列刷新显存缓冲区。

图15用于说明图14中的“遍历系统窗口队列并刷新窗口”步骤。

窗口刷新时,从根窗口开始,遍历窗口队列,根据窗口脏区域队列,刷新所有窗口显示缓冲区。当刷新窗口显示缓冲区时,结合图17所示,要遍历该窗口的所有元件队列,将元件显示缓冲区拷贝到窗口显示缓冲区;如何拷贝,则参见图19所示,图19示出了元件M刷新窗口W显示缓冲区(脏区域R)的显示效果,即窗口W′。

图16用于说明图14中的“遍历系统窗口队列并刷新屏幕”步骤。

屏幕刷新时,从根窗口开始,遍历窗口脏区域队列,根据窗口脏区域队列,刷新屏幕显示缓冲区。结合图18,当刷新屏幕显示缓冲区时,需要遍历屏幕脏区域队列。具体做法是:取出其中一个脏区域,判断窗口是否为半透明,如果不是,则将当前窗口的显示缓冲区拷贝到屏幕显示缓冲区,同时完成窗口半透明操作。然后继续完成遍历直至所有窗口都为半透明。

假设屏幕S,目标窗口W,显示区域R,半透明度X,取值范围为[0,1],则半透明操作如下所示:

S’(r)=S(r)*X+W(r)*(1-X)r∈R

注:r是R上任意一点,W(r)是窗口W在点r处的像素值,S(r)是半透明前屏幕S在点r处的像素值,S’(r)是半透明后屏幕S在点r处的像素值。

以上介绍了窗口系统的具体实现,下面将介绍窗口系统的基本操作。窗口的基本操作包括打开、关闭、移动、最大化、最小化、缩放及焦点切换等。

图20为窗口打开的前端操作流程图;

窗口打开,是指弹出窗口的打开。

首先新建窗口对象(由垃圾收集器等内存管理模块管理动态内存),初始化窗口数据;如窗口属性、元件数据等,可以从闪存中读取,也可在程序中动态生成;

然后将目标窗口插入父窗口的子窗口队列,以便在消息处理和画面刷新时能够遍历到;

接着插入屏幕弹出窗口队列,便于快速查找弹出窗口;

将窗口图标登记到任务栏窗口,这样任务栏就能显示目标窗口的图标;

最后登记显示区域到屏幕脏区域队列,画面刷新时将新窗口显示出来。

图21为窗口关闭的前端操作流程图;

窗口关闭与窗口打开(结合图20)的流程刚好相反,撤销窗口图标和从窗口队列移除目标窗口后,销毁窗口对象并释放窗口资源。

图22为窗口移动的前端操作流程图;

窗口移动,一般指弹出窗口的移动。首先根据移动位移值改变目标窗口的显示区域,并登记到屏幕脏区域队列,这个步骤可以参照图6;然后用同样的方法,取出一个字窗口,判断是否有跟随属性,然后用同样的方法,移动所有跟随属性的子窗口。

图23为窗口焦点切换前端操作流程图。

窗口焦点切换,一般指弹出窗口之间的焦点切换。先从父窗口的子窗口队列中移除目标窗口,然后插入父窗口的子窗口队列的最顶层,接着对父窗口(弹出窗口类型)递归执行焦点切换操作。

窗口最大化、最小化操作流程与窗口移动流程类似。窗口缩放操作流程较简单,可根据缩放位移值,改变目标窗口的显示区域并刷新画面即可。

上面详细阐述了本窗口系统的基本组成、具体实现及基本操作。以上具体实施方式,进一步说明多窗口管理系统具有较高的实时性和执行效率,很好的扩展性和移植性,友好的操作界面。

虽然具体实施方式说明了本发明,但是本发明并不局限于以上实施方式,而是可以在不脱离本发明思想的前提下,根据实际应用需求,作相应修改。例如:

以上实施方式,默认在具有操作系统的平台下完成,而实际上,本发明适用于所有具备消息输入接口和显示输出接口的系统平台;

如果系统内存资源比较紧张,则可去掉窗口系统中的屏幕显示缓冲区,甚至还可以去掉元件显示缓冲区;

以上实施方式,用双向循环队列的数据结构管理多个窗口,也可以用二叉树来管理;

以上实施方式,多处涉及到递归执行,在不支持递归操作的平台上,可用迭代操作代替。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号