zoukankan      html  css  js  c++  java
  • 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作为初始尺寸。

  • 相关阅读:
    Oracle数据库导入(数据泵导)
    C# 根据WCF 的url动态调用WCF
    winform嵌套浏览器
    微信支付服务商模式 配置
    结对项目-增强型科学计算器
    vscode编辑远程linux系统下c/c++代码实现代码补全
    Linux development with C++ in Visual Studio
    用VS2015开发Linux程序详细教程-配置篇
    Go语言环境搭建详解(2020版)
    bat脚本实现后台运行cmd命令
  • 原文地址:https://www.cnblogs.com/lidabo/p/3284855.html
Copyright © 2011-2022 走看看