1.在程序面上來講,每次你建窗口時要傳入一個窗口的指針/句柄(僅限于有WS_CHILD風格的窗口),則該指針/句柄所指窗口即為你所建窗口的父窗口。
2.在一個form上的所有控件都是它的子窗口。
3.windows內部對于每個父窗口都維護一個子窗口列表,當你使用GetWindow()來找時,返回列表中靠前的子窗口指針/句柄。
4.用ShowModal()彈出的窗口沒有WS_CHILD風格,根本就不是子窗口,自然也就沒有父窗口了。
5.在敲鍵后,WINDOWS會向當前窗口發送WM_KEYDOWN/WM_KEYUP/WM_CHAR等消息,這是主要的了,另外還做了很多事,比方說提高接收消息的線程的优先級等,這個內容太多,就不說了,你自已去找相關資料去看吧。

解决方案 »

  1.   

    大副:
    1。  那怎么样才能得到第二个子窗口呢?也就是说枚举所有的子窗口。
    2。  ShowModal()弹出的窗口有没有句柄呀?
      

  2.   

    你可以使用API EnumChildWindow(hwnd),其中的hwnd为父窗口句柄,在回调函数中,你可以对
    参数hwndchild进行判断,比如控件id什么的,从而得知子窗口句柄,最后返回TRUE,结束枚举
    回调函数为EnumProc(hwndchild,)
      

  3.   

    1.GetWindow(hwnd,GW_HWNDNEXT) 或 GetNextWindow(hwnd,GW_HWNDNEXT)
    2.ShowModal()?哪個語言里的,win32 api沒有此函數。但只要是窗口,都有句柄
      

  4.   

    ShowModal()是在BCB中看到的显示有模式的对话框,因此就写到这儿来了
      

  5.   

    在查帮助时也看到了EnumChildWindow()函数,但不太清楚具体的怎么用?谁能举个例子我将十分感激。尤其第二个参数  WNDENUMPROC lpEnumFunc不太会。既然枚举所有子窗口,那怎么为什么没有数组之类的去保存呢?
      

  6.   

    关于EnumChildWindow我知道怎么用了但好像用GetWindow(hwnd,GW_HWNDNEXT)与它取得的效果不一样好像前面函数更好用一点,后面的函数有时达不到目的。
      

  7.   

    关于EnumChildWindow我知道怎么用了但好像用GetWindow(hwnd,GW_HWNDNEXT)与它取得的效果不一样好像前面函数更好用一点,后面的函数有时达不到目的。
      

  8.   

    谢谢huidao11(源四郎)我用你的办法已解决问题了。给分的