首页 理论教育 如何实现完全包含子窗口

如何实现完全包含子窗口

时间:2023-10-21 理论教育 版权反馈
【摘要】:但为了实现上的简便,Hello China V1.75的实现中,要求子窗口不能位于父窗口之外。图11-7 一个非法的窗口覆盖关系其中子窗口1-1-2覆盖了父窗口1-1之外的区域。图11-8 另一个非法的窗口覆盖关系通过这种窗口关系的简化,可以使很多处理过程得到简化,最主要的是:整个系统只需要一棵窗口树就可管理全部窗口,无需再维护一个窗口Z序的列表。窗口变化时的刷新机制非常简单,只需要考虑父窗口的更新即可,无需考虑系统中的所有窗口。

如何实现完全包含子窗口

在Windows等通用操作系统中,一个窗口的子窗口,是可以位于该窗口覆盖区域之外的,如图11-5所示。

978-7-111-41444-5-Chapter11-29.jpg

图11-5 覆盖区域之外的子窗口

其中替换窗口是记事本窗口的子窗口,但是替换窗口的覆盖区域可以超过记事本窗口的覆盖范围。

但为了实现上的简便,Hello China V1.75的实现中,要求子窗口不能位于父窗口之外。比如,图11-6所示窗口关系是合法的。

978-7-111-41444-5-Chapter11-30.jpg

图11-6 合法的窗口覆盖关系

窗口1-1-1和窗口1-1-2、窗口1-2-1和窗口1-2-2分别是窗口1-1和窗口1-2的子窗口,这四个子窗口都位于其父窗口覆盖范围之内。

图11-7所示的窗口关系就不符合Hello China的要求。

978-7-111-41444-5-Chapter11-31.jpg

图11-7 一个非法的窗口覆盖关系(www.xing528.com)

其中子窗口1-1-2覆盖了父窗口1-1之外的区域。

同时,兄弟窗口之间也不能出现重叠,比如图11-8所示窗口关系,就是非法的,因为两个兄弟窗口窗口1-1和窗口1-2之间出现了重叠。

978-7-111-41444-5-Chapter11-32.jpg

图11-8 另一个非法的窗口覆盖关系

通过这种窗口关系的简化,可以使很多处理过程得到简化,最主要的是:

(1)整个系统只需要一棵窗口树就可管理全部窗口,无需再维护一个窗口Z序的列表。

(2)窗口变化时的刷新机制非常简单,只需要考虑父窗口的更新即可,无需考虑系统中的所有窗口。

(3)避免了复杂窗口剪切域的实现,使得窗口剪切基于简单的“二层窗口剪切域”机制(见11.6.2节)即可。

正是因为有这样的简单性,这个限制得到了比较广泛的使用。比如很多智能手机操作系统,就是这样处理窗口的。而且从实际应用上,这样也是足够的。层层叠叠、杂乱无序的窗口关系,不但不会提升计算机使用效率,反而会增加操作的复杂性,导致错误率增大。因此即使是微软,也似乎极力推广这种窗口模型。比如其Office软件,缺省都是占据整个屏幕,每当打开一个文档,Office便会为其创建一个单独的窗口,而不是以前广泛使用的一个框架窗口管理多个子窗口的机制(MDI机制)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈