2009-05-21 55 views
0

在我的本地Windows移動應用程序中,我有一個窗口創建對話框。可以說我的窗戶把手是hMainWnd什麼會導致父窗口不知道它有一個子對話框?

我創建使用DialogBoxParam()hMainWnd傳遞作爲對話的父對話:

DialogBoxParam(_,_,hMainWnd,_,_); 

比方說對話框的句柄hDlgWnd。從該對話框中,GetParent()返回hMainWnd預期:

//We're inside the dialog created above 
HWND hParent = GetParent(hDlgWnd); //hParent == hMainWnd 

下面是奇怪的事情,呼籲GetWindow()找到hMainWnd回報NULL孩子們,表示它有沒有孩子。我希望函數返回hDlgWnd

//We're inside the main window  
HWND hChild = GetWindow(hMainWnd, GW_CHILD); //hChild == NULL 

一個孩子怎麼能知道它的父時,家長不知道其子?

回答

3

GetWindowGW_CHILD顯然不檢索後代窗口,只有子窗口。從MSDN

檢索的句柄標識所述 子窗口在Z 順序的頂部,如果指定的窗口是 父窗口;否則, 檢索到的句柄爲NULL。功能 僅檢查指定窗口的子窗口。它不檢查 子孫窗口

孩子和後代有什麼區別?我不知道,但EnumChildWindows可能會得到你所需要的。

+0

對不起,WS_CHILD是一個錯字。我已經修復它並試圖澄清這個問題。我怎麼做? – 2009-05-22 01:47:15

0

窗口既可以是子窗口(具有WS_CHILD樣式),也可以是頂級窗口。

頂層窗口沒有父窗口,但它們可能擁有所有者窗口。兒童窗戶有父母,但沒有所有者。

GetParent()函數返回子窗口的父項或頂級窗口的所有者。因此,它被錯誤命名 - 它應該被稱爲GetParentOrOwner()。

因此,發生的事情是您從GetParent()獲取頂級窗口的所有者,但由於它實際上不是父級,所以hDlgWnd不是hMainWnd的子級。

相關問題