在Windows等通用操作系统中,一个窗口的子窗口,是可以位于该窗口覆盖区域之外的,如图11-5所示。
图11-5 覆盖区域之外的子窗口
其中替换窗口是记事本窗口的子窗口,但是替换窗口的覆盖区域可以超过记事本窗口的覆盖范围。
但为了实现上的简便,Hello China V1.75的实现中,要求子窗口不能位于父窗口之外。比如,图11-6所示窗口关系是合法的。
图11-6 合法的窗口覆盖关系
窗口1-1-1和窗口1-1-2、窗口1-2-1和窗口1-2-2分别是窗口1-1和窗口1-2的子窗口,这四个子窗口都位于其父窗口覆盖范围之内。
图11-7所示的窗口关系就不符合Hello China的要求。
图11-7 一个非法的窗口覆盖关系(www.xing528.com)
其中子窗口1-1-2覆盖了父窗口1-1之外的区域。
同时,兄弟窗口之间也不能出现重叠,比如图11-8所示窗口关系,就是非法的,因为两个兄弟窗口窗口1-1和窗口1-2之间出现了重叠。
图11-8 另一个非法的窗口覆盖关系
通过这种窗口关系的简化,可以使很多处理过程得到简化,最主要的是:
(1)整个系统只需要一棵窗口树就可管理全部窗口,无需再维护一个窗口Z序的列表。
(2)窗口变化时的刷新机制非常简单,只需要考虑父窗口的更新即可,无需考虑系统中的所有窗口。
(3)避免了复杂窗口剪切域的实现,使得窗口剪切基于简单的“二层窗口剪切域”机制(见11.6.2节)即可。
正是因为有这样的简单性,这个限制得到了比较广泛的使用。比如很多智能手机操作系统,就是这样处理窗口的。而且从实际应用上,这样也是足够的。层层叠叠、杂乱无序的窗口关系,不但不会提升计算机使用效率,反而会增加操作的复杂性,导致错误率增大。因此即使是微软,也似乎极力推广这种窗口模型。比如其Office软件,缺省都是占据整个屏幕,每当打开一个文档,Office便会为其创建一个单独的窗口,而不是以前广泛使用的一个框架窗口管理多个子窗口的机制(MDI机制)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。