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类型,本章节可以算作是一个扩展章节,主要就来研究 ...
随机推荐
- C# 集合详解 (适合新手)
System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic 命名空间包含定义 ...
- Lisp之根源
原文:http://www.paulgraham.com/rootsoflisp.html 约翰麦卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如 欧几里德对几何的贡献.1 他向我 ...
- UESTC_全都是秋实大哥 2015 UESTC Training for Search Algorithm & String<Problem J>
J - 全都是秋实大哥 Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others) Subm ...
- Rightmost Digit(快速幂+数学知识OR位运算) 分类: 数学 2015-07-03 14:56 4人阅读 评论(0) 收藏
C - Rightmost Digit Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- shell脚本书写总结
1.shell脚本,如果重定向到文件中,则在脚本中不可以sed -i,如果用了sed -i ,则自打用了sed -i之后的打印都不能再重定向到输出文件了. 2.shell脚本中,如果将命令写在字符串里 ...
- POJ 2479-Maximum sum(线性dp)
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33918 Accepted: 10504 Des ...
- 使用JUnit单元测试入门
一.JUnit是什么? JUnit是一个开发源代码的java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).JUnit最初是由Erich Gam ...
- PHP学习笔记七【函数】
<?php $a=13; function abc3($a) { unset($a);//[释放给定变量]表示不在abc3函数范围内,不在使用$a,后面需要全新定义 $a=45; } abc(3 ...
- 池化 - Apache Commons Pool
对于那些创建耗时较长,或者资源占用较多的对象,比如网络连接,线程之类的资源,通常使用池化来管理这些对象,从而达到提高性能的目的.比如数据库连接池(c3p0, dbcp), java的线程池 Execu ...
- HNOI2004 宠物收养所 解题报告
首先读完这题第一印象,是个裸题,很高兴.其次在打完代码之后,第二印象,很恶心,Treap的代码太长了,我今天下午敲了三遍,手都麻了. 废话不多说,正题.其实这个题不难,有几个点是很好的,首先,他的a值 ...