MFC窗口的父子关系和层级关系
一直对窗口之间的关系有些混乱,遇到需要指定父窗口的函数时常常要考虑很久,究竟父窗口是哪个窗口,遂上网查资料,略有所悟,简记如下:
对话框中的所有控件(比如Button等)都是其子窗口。
文档/视图结构中,框架窗口是视图窗口的父窗口。
同时在使用CreateWindow和CreateWindowEx时可以指定父窗口,建立窗口的父子关系。
另外,网上有篇文章讲Windows窗口的层级关系,也颇清楚,故转来备查:
一、windows窗口之间的关系包括所有与被所有关系,父子关系等。
操作系统为每个窗口实例都分配一个内存空间,该空间被称为窗口实例的信息结构。该结构包含了窗口实例的所有信息,其中有四个窗口句柄:1、本窗口实例的Z_Order顺序最高的子窗口句柄;2、本窗口实例的下一个兄弟窗口的句柄(子窗口之间称为兄弟窗口);3、本窗口实例的父窗口句柄;4、本窗口实例的所有者窗口句柄。
二、桌面窗口(第一层窗口)
windows初始化时,首先创建一个桌面窗口,其他所有窗口都显示在其上。::GetDesktopWindow()可以取得桌面窗口的句柄。桌面窗口位于系统窗口层次的最上层。
三、顶级窗口(第二层窗口)
它没有被设置为WS_CHILD风格的窗口,但它是桌面的子窗口。虽然顶级窗口之间存在兄弟关系,但它们之间可以建立一种所有与被所有的关系(所有者窗口和受控窗口)。受控窗口位于所有者窗口前段,即它的Z_Order顺序可以被所有者窗口被激活而提高。所有者窗口最小化时,受控窗口被隐藏。当使用CreateWindow()和CreateWindowEx()创建一个顶级窗口时,参数hWndParent决定所有者窗口,若hWndParent为子窗口,则由系统搜索该子窗口的上级窗口,直到找到最近的顶级窗口,作为被创建窗口的所有者。
四、子窗口(第三层及其以下窗口)
子窗口以同样的方式和父窗口连接。决定顶级窗口之间的Z_Order顺序的规则,同样适合子窗口之间,即由扩展风格WS_EX_TOPMOST和窗口激活的先后顺序共同决定。
五、重叠窗口与弹出窗口的区别
它们都是顶级窗口。前者总有标题栏和边框,并且总是自动设置WS_CLIPSIBLINGS风格。调用CreateWindow()和CreateWindowEx()创建重叠窗口时,可以指定默认的窗口尺寸参数,即CW_USEDEFAULT,由系统设置窗口的初始尺寸。弹出窗口同样自动设置WS_CLIPSIBLINGS风格,但其他风格必须专门指定,不可以使用CW_USEDEFAULT作为初始尺寸。
MFC窗口的父子关系和层级关系的更多相关文章
- Unity NGUI和UGUI与模型、特效的层级关系
目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...
- GetParent、SetParent、MoveWindow - 获取、指定父窗口和移动窗口,IsChild - 判断两个窗口是不是父子关系
提示: SetParent 应该 Windows.SetParent, 因为 TForm 的父类有同名方法. //声明: {获取父窗口句柄} GetParent(hWnd: HWND): HWND; ...
- NGUI 层级关系控制
NGUI元素的遮挡情况是不依赖空间关系,所以在NGUI上添加特效有时候特别蛋疼,特别是美术同学还要依赖空间关系来控制特效效果,那先看看看NGUI的层级是怎么处理的,不过下面的描述都是针对单个相机下的P ...
- 树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示
树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:pa ...
- unity渲染层级关系小结(转存)
最近连续遇到了几个绘制图像之间相互遮挡关系不正确的问题,网上查找的信息比较凌乱,所以这里就把自己解决问题中总结的经验记录下来. Unity中的渲染顺序自上而下大致分为三层. 最高层为Camera层,可 ...
- 【吐血分享】SQL Server With As 递归获取层级关系数据
纯洁的一周又开始了,今天看到一则新闻,笑尿了,和袁友们一起娱乐下 最近两月在做基于Saas模式的人力资源管理产品,平常数据库设计我经常会遇到如下需求场景: 以前商城类网站在设计类型表的时候,设计成单表 ...
- CTE计算层级关系
推广渠道表有ParentID字段,代表上下层级关系.现要统计每个推广员,推广了多少人? --创建表结构,插入测试数据 USE DBA_Monitor GO CREATE TABLE [dbo].[TG ...
- [转]NHibernate之旅(9):探索父子关系(一对多关系)
本节内容 引入 NHibernate中的集合类型 建立父子关系 父子关联映射 结语 引入 通过前几篇文章的介绍,基本上了解了NHibernate,但是在NHibernate中映射关系是NHiberna ...
- 第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。
一. 整体说明 揭秘: 通过F12查看Task类的源码(详见下面的截图),发现Task类的构造函数有有一个参数为:TaskCreationOptions类型,本章节可以算作是一个扩展章节,主要就来研究 ...
随机推荐
- 分布式文件系统 Mogilefs 安装步骤
我这里的环境都是 RHEL 5 的环境. MySQL 数据库 和 tracker 都放到一台服务器上, 为 192.168.2.85 storage server两台, 分别为 192.168.2.9 ...
- python list列表 方法总结
深入链表(most on lists) The list data type has some more methods. Here are all of the methods of list ob ...
- unmount的时候报错
卸载存储的时候报错 device is busy 解决办法 例:/mnt/test 为存储挂载点 fuser -m -v /mnt/test fuser 可以显示出当前哪个程序在使用磁盘上的某个文件. ...
- 格而知之3:Core Data的基本使用
最近准备做一个随手笔记类的app给自己用,考虑到从未使用过Core Data,就决定用Core Data来做数据存储.在网上参考了一些Core Data的资料后,用一天的时间写了这个demo,主要测试 ...
- java中a++与++a区别
java中a++与++a区别 a++与++a的区别,如果单独使用没有任何区别,如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算!! 先看a++的代码哦 class demo1 { ...
- HTML标签的offset、client、 scroll和currentStyle属性
本文来自:http://www.cnblogs.com/quanhai/archive/2010/04/19/1715231.html offsetHeight = borderTopWidth + ...
- java中拼接两个数组
int a[]={1,2,3,2}; int b[]={4,2,90,8,98}; int[] d3 = new int[a.length + b.length]; System.arraycopy( ...
- 2014年1月9日 Oracle 实用系统函数
1.空值处理 1.1 NVL(column/value,VALUE2) 与SQLSERVER的ISNULL相同 1.2 NVL2(column/value,Value2,Value3) 若参数1为空则 ...
- HDU 5794 - A Simple Nim
题意: n堆石子,先拿光就赢,操作分为两种: 1.任意一堆中拿走任意颗石子 2.将任意一堆分成三小堆 ( 每堆至少一颗 ) 分析: 答案为每一堆的 ...
- linux下C++ STL hash_map的使用以及使用char *型变量作为Key值的一大“坑”
计算机编程中经常会用到hash表,而在C++中,使用STL编程更是少不了的.本文将介绍STL中hash_map的使用.在hash_map中使用自定义类型作为key值的方法以及在使用char *类型作为 ...