此外,为了达到不同的目的,系统提供了同步和异步两种基本类型的消息。
2.3 桌面及窗口管理
屏幕中的窗口通常是相互覆盖,而且它们的相对位置也在不断地变动。这些窗口有可能分别属于不同的任务,但共享一个相同的屏幕。所以,如何方便并有效地计算和维护窗口便显得很重要。
首先介绍2个概念:全局剪切域和窗口剪切域。它们都与应用任务相关,前者指出哪些区域占据屏幕,后者给出在相同的应用任务中所有对象的剪切关系。
系统任务除了要维护它自己的剪切域外,还要负责管理所有应用任务的全局剪切域,如图6所示。一旦窗口位置发生变化,系统任务必须更新信息并且通知应用任务作出相应的变动。另一方面,在计算窗口剪切域时,应用任务只须关心它本身而不受其他任务的影响,好像整个屏幕只有它一个任务在运行。至于最后实际的剪切结果,只需将全局剪切和窗口剪切结果进行“与”运算。
2.4 Z序和对象树
Z序实际定义了屏幕中对象集(可显窗口)之间的层次关系。GUI用户可以通过选择要被置于前端的窗口来改变Z序。很多GUI系统将Z序当作一个带有指定运算集的显式列表来实现。然而,在嵌入式GUI系统中不用这种方式,而是通过对象树来说明这些GUI对象之间的层次关系和Z序。理论上,每一个GUI对象都有父亲、孩子和兄弟。因此,所有显示在屏幕上的对象便构成一棵以桌面为根节点的倒置树。对树进行“后根遍历”就能够容易地得到Z序。
图7描述了对象树的建立过程。对象树的采用极大地简化了桌面管理,能够在不增加额外工作的情况下方便地组合对象和实现Z序管理。
3 小 结
将来的GUI系统将越来越复杂,要求GUI系统实现的功能也越来越丰富,这就需要一个更加开放且伸缩性好的体系结构。本文提出的嵌入式GUI体系结构具有很强的灵活性,且可移植性好,能够很好地应用于嵌入式领域的各种环境。