窗口剪切域在基于窗口的图形界面中,是最核心的机制之一。要实现窗口剪切域,往往涉及比较繁琐的矩形剪裁和合并算法,会消耗很多的内存和CPU资源。为避免通用窗口剪切域带来的弊端,简化实现方式,以适应嵌入式系统的特点,Hello China目前GUI模块的实现,采用了一种简化窗口剪切域的方案:二层剪切域。
所谓二层剪切域,指的是一个窗口在变动(创建、移动、撤销等)的时候,只对其父窗口的剪切域进行更新,而不像通用操作系统一样,对所有窗口的剪切域更新。这样可大大降低处理器的消耗和内存的消耗,同时又不会降低GUI模块的效果。之所以能够采用二层窗口剪切域,是因为Hello China操作系统的窗口机制是基于“父窗口完全涵盖子窗口”的原则的,这样一个窗口的变动,只会对其父窗口造成影响,不会对其他窗口造成影响。
实际上,Windows操作系统的一些主流应用程序(比如Microsoft Office等),也在遵循这种简单的剪切域关系。这些通用的软件,已经彻底摒弃了原有的MDI多层次窗口概念,同时程序的工具条默认处于固定位置,这样事实上就是一种二层剪切域的理念。用户可以改变这种缺省的设置,比如建立多个子窗口,随便移动工具条等。但这样做会消耗很多的CPU和内存资源。
采用二层剪切域机制,需要遵循下列限制(或规则):
(1)兄弟窗口(具备相同父窗口的窗口)之间不能重叠。因为一个窗口的变动,只会更新父窗口的剪切域,不会改变兄弟窗口的剪切域。若两个兄弟窗口重叠,在一个窗口移动或销毁的时候,会导致另外一个兄弟窗口不能完整显示。(www.xing528.com)
(2)窗口之间不能“隔代”覆盖。即一个窗口,不能覆盖在其父窗口的父窗口(即祖父窗口)之上。原因也很明显,这个窗口的显示或变化,只会使得其父窗口更新剪切域,而不会使其祖父窗口更新剪切域。这样在窗口变化的时候,会影响其祖父窗口的外观。
(3)一个窗口也不能覆盖在其“叔叔”窗口或“伯伯”窗口之上,原因同上。
虽然这些规则会限制窗口系统的使用范围,但在大多数情况下,这种实现是可以满足功能需求的。尤其是在嵌入式系统情形下,各种硬件资源受到限制,显示屏幕尺寸不会太大。即使实现了完整的窗口机制,也不会得到全部的功能发挥。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。