欢迎来到天天文库
浏览记录
ID:56730194
大小:95.50 KB
页数:7页
时间:2020-07-06
《窗口之间的主从关系与Z-Order.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.窗口之间的主从关系与Z-Order围(Scope)讨论Windows操作系统中窗口之间的关系(relationshipbetweenwindows),除特别指明的部分之外,适用于各版本桌面平台和WindowsMobile平台。概述(Summary)窗口(Window)是Windows操作系统中用来显示信息和接受用户输入的基本单元(Block)。负责管理窗口相关功能的操作系统部件被称为窗口管理器(WindowManager)。Windows操作系统初始化时会生成一个窗口,叫做桌面窗口(DesktopWindow),调用GetDesktopWindow函数可获得它的句柄。桌面
2、窗口会覆盖整个屏幕,所有其它窗口都在其之上显示。窗口类型(WindowType)Windows中有3种类型的窗口:层叠窗口(OverlappedWindow)、弹出窗口(PopupWindow)、子窗口(ChildWindow),在生成窗口(调用CreateWindowEx)时分别以WS_OVERLAPPED、WS_POPUP或WS_CHILD窗口风格(Style)来表示。层叠窗口是窗口的缺省类型,如果不指定任何窗口类型则生成的是层叠窗口。弹出窗口通常用于对话框。它隐含带有WS_CLIPSIBLINGS窗口风格(后面会详细描述)。层叠窗口通常被用作应用程序的主窗口,也隐含带
3、有WS_CLIPSIBLINGS窗口风格。在桌面平台上,层叠窗口还隐含带有WS_CAPTION窗口风格。带有标题栏的窗口都隐含带有边框(Border),至于原因嘛,想像一下“光秃秃的标题栏”+“没有边框的窗口”会是个什么样子。在Mobile平台上,层叠窗口与弹出窗口的界限已经很模糊了。层叠窗口和弹出窗口统称为顶层窗口(top-levelwindows)。剩下的一类是子窗口,例如常见的Button,EditBox,ListBox等窗口控件。WS_OVERLAPPED的值..在桌面平台上,WS_OVERLAPPED定义为0,这与窗口的缺省类型为层叠窗口的事实相符;而在Windo
4、wsMobile平台上,WS_OVERLAPPED被定义为WS_BORDER
5、WS_CAPTION,这是怎么回事呢?我想这是微软为了保持桌面平台与Mobile平台软件的外观兼容性而使用的一个技巧,因为Mobile平台上的层叠窗口缺省是不带WS_CAPTION风格的,微软的意思应该是:(WS_OVERLAPPEDinPC)=(WS_OVERLAPPEDinMobile)
6、WS_BORDER
7、WS_CAPTION,在字面上就会写成:#defineWS_OVERLAPPEDWS_BORDER
8、WS_CAPTION这样定义可以方便桌面平台上的代码移植到Mobile平台。但开发原生的
9、WindowsMobile代码时就要注意了,由于Mobile上的典型窗口是不带标题栏的(Mobile界面最上方的TitleBar并不属于窗口的一部分),我们在生成层叠窗口时不应使用WS_OVERLAPPED标志(这一标志的实际意义是:PCstyleoverlappedwindow)—不指定任何窗口类型就好。窗口层次结构(WindowHierarchy)窗口管理器以一个树状结构组织和管理系统所有窗口,如图:图1.树状的窗口组织图树形结构的根是桌面窗口,其下属第一层窗口是顶层窗口(层叠窗口+弹出窗口,见上一小节)。顶层窗口之下的所有层里只包含子窗口。从桌面窗口出发,通过一系列相
10、关API函数的调用,可以遍历系统中的所有窗口。窗口的从属关系包括父/子(parent-child)关系、拥有/被拥有(owner-owned)关系及兄弟(siblings)关系。..●父/子(parent-child)关系类型为ChildWindow的窗口必须有一个父窗口,父窗口的类型可以是3种类型中的任意一种。子窗口的位置坐标都是相对于父窗口客户区的左上角(upper-leftcorner)计算的。子窗口会把它的notify消息发送到父窗口。父/子关系对窗口可见性的影响为:子窗口只能显示在它的父窗口的客户区中,超出父窗口客户区的部分将被裁减掉;父窗口被隐藏时,它的所有子窗
11、口也被隐藏;最小化父窗口不影响子窗口的可见状态,子窗口会随着父窗口被最小化,但是它的WS_VISIBLE属性不变。父窗口被销毁的时候,它的所有子窗口都会被销毁。窗口生成时通过CreateWindowEx函数的hWndParent参数可指定其父窗口,或在窗口产生后通过SetParent函数更改。通过GetParent函数可获取父窗口句柄。父窗口要查询其子窗口可使用GetWindow函数(指定GW_CHILD标志),该函数返回第一个子窗口的句柄。桌面窗口与所有顶层窗口也是父/子关系,但又有其特殊性:对桌面窗口调用Get
此文档下载收益归作者所有