窗口,父窗口parentwindow,所有者窗口ownerwindow

参考文档:http://www.cnblogs.com/fwycmengsoft/p/4026592.html

一、

parent:创建者,owner:所有者

小玉的父母生下小玉,养到8岁,卖给贾府当丫头
小玉的父母是parent,贾府是owner

二、

1.Pop-up窗口: 一个弹出窗口是必须具有WS_POPUP属性的窗口,弹出窗口只能是一个Top-Level窗口,不能是子窗口,弹出窗口多用于对话框和消
              息框,也可以用于应用程序的主窗口, 弹出窗口可以不必具有标题栏

2.Overlapped窗口: 一个重叠窗口是一个必须具有WS_OVERLAPPED属性的窗口,也就是一个重叠窗口必须具有边框,标题栏,客户区域。重叠窗口
                  可以是一个子窗口,也可以是一个Top-Level窗口,重叠窗口一般都用于一个应用程序的主窗口

3.Top-Level窗口: 就是没有WS_CHILD属性的窗口,所有的Top-Level的父窗口为桌面窗口。并不是所有的Top-Level的窗口都在系统的任务栏中
                 显示,只有所有者窗口为NULL的Top-Level窗口才能在任务栏中显示窗口的标题

4.Child窗口: 具有父窗口的窗口叫子窗口, 子窗口必须具有WS_CHILD属性,同时子窗口也可以有子窗口,子窗口可以是一个重叠窗口,但不能是
             一个弹出窗口。子窗口只能包含在父窗口的客户区,不能移出到父窗口客户区外,而且子窗口也不可能成为活动窗口,也不可能
             将子窗口的标题显示在任务栏上。同时子窗口的最大化和最小化都在父窗口中显示,在建立一个子窗口时所指定的RECT是以父窗
             口的客户区的左上角为原点。而建立一个非子窗口时所指定的RECT是以屏幕为坐标原点的。子窗口可以有系统菜单,但不能有菜
             单栏.子窗口在父窗口销毁前被销毁,在父窗口隐藏前被隐藏,在父窗口显示后被显示,

5.Desktop窗口: 就是桌面,桌面窗口是一个特殊窗口,他既不是一个子窗口,也不是一个重叠窗口,也不是一个弹出窗口。

6.Parent窗口: 具有子窗口的窗口叫父窗口,父窗口销毁前所属的子窗口将自动被销毁。父窗口在最小化时,其子窗口也会被最小化,但不隐藏
              而父窗口在恢复时其子窗口也会被恢复.

7.Owner窗口:  只有重叠窗口和弹出窗口才能是Owner窗口,子窗口不能为Owner窗口,Owner窗口销毁前,他的所有的Owned窗口都将被自动销毁,
              当Owner窗口隐藏时他的所有Owned窗口不会隐藏。但当Owner最小化是他的Owned窗口会被隐藏。一个Owner窗口的所有Owned                 窗口都将在Owner窗口的前面显示,而不会在其后面显示。

8.Owned窗口:  一个Owned窗口总是在Z-Order顺序中一般是在他的Owner窗口之前,Owned窗口的生命可以被他的Owner窗口控制,Owned窗口的显
               示并不局限于他的Owner窗口区域,一个Owned窗口在建立后不能改变他的owner窗口,子窗口,弹出窗口,重叠窗口都可以做Owned
               窗口。

9.窗口的Z-ORDER:

10.message-only窗口: 消息窗口不能被显示,不能接受键盘和鼠标消息,不会接收广播来的消息,同时消息窗口也不会被列举,不会出现在窗口的
                     Z-Order顺序中。其他的于一般窗口一样。能接收和发送消息。重叠,弹出,子窗口都能为消息窗口

11.background窗口: 非foreground窗口就叫background窗口

12.foreground窗口: 如果用户正某个线程建立的窗口上时,这时这个线程称为前台线程,这个窗口则称为前台窗口,此时其他的线程都称为后台
                   线程,后台线程的窗口则称为后台窗口, 前台线程的优先级将必后台线程的优先级要稍微高一点。当一个窗口成为前台窗
                   口时,这个窗口也成为了活动窗口。系统有一个RIT线程来维护硬件输入队列SHIQ,每个GUI线程都维护者一个虚拟输入消
                   息队列,而且在一个时间内只有一个线程的虚拟输入队列于SHIQ相联系,则这个于SHIQ相联系的线程就叫前台线程.

13.active窗口: 活动窗口是用户正在操作的一个Top-Level窗口,活动窗口一般放置在Z order的顶端,并且窗口的标题栏颜色高亮显示。只有顶
               层窗口才能作为活动窗口,当用户在一个子窗口上工作时,则子窗口所属的一个Top-Level父窗口成为活动窗口,在一个时间
               内只有一个顶层窗口是活动窗口,活动窗口就是当前正接收键盘和鼠标输入的窗口

14.disabled窗口:  不能响应键盘和鼠标输入的窗口
15.visible窗口:    不可看见的窗口

三、

确定窗口的父窗口和所有者窗口

在调用CreateWindow(Ex)函数来建立窗口时,根据hWndParent和dwStyle来确定一个窗口的父窗口和所有者窗口,下面根据hWndParent是否为NULL来区分:

1.hWndParent == NULL   (必须是建立非WS_CHILD的窗口,才能hWndParent为NULL)
   对于有WS_CHILD的dwStyle来说,hWndParent不能为NULL, 因此主要是建立重叠窗口和弹出窗口的情况,在这种情况下建立的窗口的父窗口将是系统的桌面窗口,而窗口的所有者窗口则是NULL。

2. hWndParent != NULL
     对于有WS_CHILD的dwStyle来说,hWndParent就是新建窗口的父窗口,而新建窗口的所有者窗口为NULL; 对于没有WS_CHILD的重叠窗口或者弹出窗口来说,新建窗口的父窗口将为NULL, 而hWndParent则是新建窗口的所有者窗口, 只有hWndParent是一个重叠的和弹出的窗口才有资格成为一个所有者窗口,因此若hWndParent为桌面窗口时,则新窗口的所有者窗口为NULL, 而若当hWndParent为一个子窗口时,则新建窗口的所有者窗口是hWndParent窗口的Top-Level父窗口。

四、

在DREEATEWINDOW方法中,已经决定了父窗口或所有者窗口.
子窗口的父窗口必不为空,但其所有者必为空.
重叠窗口和弹出窗口如果HWNDPARENT不为空,则是其所有者窗口,它们的父窗口必空.

如此一来,子窗口必有父窗口,必无所有者窗口. 重叠,弹出窗口可能有所者窗口,一般无父窗口.

时间: 2024-12-21 00:57:52

窗口,父窗口parentwindow,所有者窗口ownerwindow的相关文章

mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别

mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别 1.理解窗口之间的关系   2.   如何设置(创建)不同的窗口 一. parent:创建者,owner:所有者 小玉的父母生下小玉,养到8岁,卖给贾府当丫头小玉的父母是parent,贾府是owner 二. 1.Pop-up窗口: 一个弹出窗口是必须具有WS_POPUP属性的窗口,弹出窗口只能是一个Top-Level窗口,不能是子窗口,弹出窗口多用于对话框和消              息框,也可以用于应用程序的

父窗口window.showModalDialog传值 子窗口window.returnValue返回值

父窗口打开子窗口页面: var fatherWindow = document.all.dealReason;//想传的值 win = window.showModalDialog(strUrl, fatherWindow, "dialogWidth=800px;dialogHeight=600px;"); //strUrl是子窗口页面,fatherWindow是想传的值,win是子窗口返回的值document.all.dealReason.value = win; 子窗口: var

关于Mdi窗口-父窗口上的控件把子窗口的挡住的问题

using System.Runtime.InteropServices; [DllImport("user32")] public static extern int SetParent(int hWndChild, int hWndNewParent); ///temp2是你的子form temp2.MdiParent = this; temp2.Show(); SetParent((int)temp2.Handle, (int)this.Handle); 原文:http://to

在winform中,关闭窗口时刷新父窗口(原来打开此窗口的窗口)

如何在关闭窗口时刷新父窗口(原来打开此窗口的窗口,不一定是mdi窗口), 这种事情在b/s里很简单,但在winform里却不那么好办.因为你不能关闭第一个窗口时再打开另一个窗口,如果这样的话新窗口就一起被关闭了.但是正因为这样,我们可以让刷新的动作在关闭子窗口时进行,当然所有的动作是在父窗口中进行的.晕,不知道说明白了没有.还是看一下例子吧public partial class Customer : Form    {        public Customer()        {    

窗口嵌入到另一个窗口(VC和QT都有)

1.用vc新建一个dialog1工程.属性默认. 2.insert一个dialog2,改为child. 3.在dialog1中包含dialog2头文件,在一个按钮事件中显示dialog2: Cdialog2 *p = new Cdialog2(this); p->Create(IDD_Dialog2); p->SetParent(this);//设置dialog1为父窗口 p->ShowWindow(SW_SHOW); 这样,dialog2便嵌到dialog1了,比用tabcontrol

VC实现A进程窗口嵌入到B进程窗口中显示的方法

这篇文章主要介绍了VC实现A进程窗口嵌入到B进程窗口中显示的方法,对于理解windows程序运行原理的进程问题有一定的帮助,需要的朋友可以参考下 本文通过一个Demo示例讲述把A应用程序嵌入到B应用程序中显示的方法. 主要代码如下: <span style="font-size:12px;font-weight: normal;">//在B应用启动时创建A进程 CreateProcess(_T("A.exe"),NULL,NULL,NULL,FALSE,

Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8570428 通过前面几篇文章的学习,我们知道了在 Android系统中,无论是普通的Activity窗口,还是特殊的输入法窗口和壁纸窗口,它们都是被WindowManagerService服务组 织在一个窗口堆栈中的,其中,Z轴位置较大的窗口排列在Z轴位置较小的窗口的上面.有了这个窗口堆栈之后,WindowManagerService服务 就可

Android窗口管理服务WindowManagerService对窗口的组织方式分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8498908 我们知道,在Android系统中,Activity是以堆栈的形式组织在ActivityManagerService服务中的.与 Activity类似,Android系统中的窗口也是以堆栈的形式组织在WindowManagerService服务中的,其中,Z轴位置较低的窗口 位于Z轴位置较高的窗口的下面.在本文中,我们就详细分析Win

模态窗口其实就是在当前窗口调用系统的消息循环,响应用户的操作,将相关的消息发送到对应的窗口(转)

上周准备在公司内部转岗,面了3个部门windows客户端相关的工作,最终拿到3个Offer,主要涉及C++和Windows两大块内容,C++的题目基本都答上了,Windows一直都是我的弱项,在这里记录一下Windows相关的题目.有些答不上的问题就没列出来,还有些问题忘了,下面的答案有些大部分是我自己的理解,有些是直接从网上copy的,有问题大家可以讨论. 1:GetMessage和PeekMessage的区别? GetMessage:获取消息队列中的一个消息,存入MSG中,并从消息队列中移除