參考文檔: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不為空,則是其所有者窗口,它們的父窗口必空.
如此一來,子窗口必有父窗口,必無所有者窗口. 重疊,彈出窗口可能有所者窗口,一般無父窗口.