所以,我有一個MFC程序的插件。我使用鼠標事件鉤子(來自SetWindowsHookEx)捕獲點擊。宿主應用程序可以打開任意數量的(可能重疊的)子窗口,但我只想攔截特定子窗口中的點擊。找到哪個MFC子窗口會收到鼠標點擊
有沒有一種方法可以在hook proc中找出哪些子窗口會處理點擊?我猜這是像枚舉所有子窗口,看Z順序,但我很不熟悉MFC/Win32庫,我無法找到任何關於如何枚舉所有孩子和計算哪些是好的討論最上面。
所以,我有一個MFC程序的插件。我使用鼠標事件鉤子(來自SetWindowsHookEx)捕獲點擊。宿主應用程序可以打開任意數量的(可能重疊的)子窗口,但我只想攔截特定子窗口中的點擊。找到哪個MFC子窗口會收到鼠標點擊
有沒有一種方法可以在hook proc中找出哪些子窗口會處理點擊?我猜這是像枚舉所有子窗口,看Z順序,但我很不熟悉MFC/Win32庫,我無法找到任何關於如何枚舉所有孩子和計算哪些是好的討論最上面。
也許WindowFromPoint
API函數符合法案?
檢索包含指定點的窗口的句柄。
該文檔沒有明確提及Z排序,但我可以向您保證從第一手經驗中「隱含」意味着沒有其他窗口在前面。
還有幾個這些,具有稍微不同的行爲:ChildWindowFromPoint
,ChildWindowFromPointEx
和RealChildWindowFromPoint
。
從我做MFC開始已經很長時間了,但我認爲HitTest是您正在尋找的術語。通過MSDN的快速拖網表明大多數Windows實現了一個HitTest函數,該函數返回有關特定點的信息。
謝謝,這是做到了。我還發現了一些很好的信息(特別是使用GetCursorPos API):http://www.codeproject.com/KB/dialog/windowfinder.aspx – tfinniga 2010-05-19 19:55:33