所以,我有一个MFC程序的插件。我正在使用鼠标事件挂钩(来自SetWindowsHookEx)来捕获点击次数。主机应用程序可以打开任意数量(可能重叠)的子窗口,但我只想拦截特定子窗口中的点击。
有没有办法在钩子proc中找出哪个子窗口会处理点击?我想这类似于枚举所有子窗口,看着Z顺序,但我对MFC / Win32库非常不熟悉,而且我无法找到关于如何枚举所有子节点并计算哪个是最上面。
答案 0 :(得分:4)
也许WindowFromPoint
API函数符合要求?
检索包含指定点的窗口的句柄。
文档没有明确提到Z排序,但我可以从第一手经验向您保证“包含”隐含意味着没有其他窗口在前面。
还有其他一些行为略有不同:ChildWindowFromPoint
,ChildWindowFromPointEx
和RealChildWindowFromPoint
。
答案 1 :(得分:0)
我做MFC已经很久了,但我认为HitTest是你要找的术语。通过MSDN快速浏览表明大多数窗口都实现了一个返回特定点信息的HitTest函数。