2010-05-19 99 views
3

所以,我有一个MFC程序的插件。我使用鼠标事件钩子(来自SetWindowsHookEx)捕获点击。宿主应用程序可以打开任意数量的(可能重叠的)子窗口,但我只想拦截特定子窗口中的点击。找到哪个MFC子窗口会收到鼠标点击

有没有一种方法可以在hook proc中找出哪些子窗口会处理点击?我猜这是像枚举所有子窗口,看Z顺序,但我很不熟悉MFC/Win32库,我无法找到任何关于如何枚举所有孩子和计算哪些是好的讨论最上面。

回答

3

也许WindowFromPoint API函数符合法案?

检索包含指定点的窗口的句柄。

该文档没有明确提及Z排序,但我可以向您保证从第一手经验中“隐含”意味着没有其他窗口在前面。

还有几个这些,具有稍微不同的行为:ChildWindowFromPoint,ChildWindowFromPointExRealChildWindowFromPoint

+0

谢谢,这是做到了。我还发现了一些很好的信息(特别是使用GetCursorPos API):http://www.codeproject.com/KB/dialog/windowfinder.aspx – tfinniga 2010-05-19 19:55:33

0

从我做MFC开始已经很长时间了,但我认为HitTest是您正在寻找的术语。通过MSDN的快速拖网表明大多数Windows实现了一个HitTest函数,该函数返回有关特定点的信息。