mfc - 查找哪个 MFC 子窗口将收到鼠标单击

标签 mfc winapi mouse hook mouseevent

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

有没有办法在 hook proc 中找出哪个子窗口将处理点击?我想这类似于枚举所有子窗口,查看 Z 顺序,但我对 MFC/Win32 库非常不熟悉,而且我找不到任何关于如何枚举所有子窗口并计算哪个是最顶层。

最佳答案

也许是 WindowFromPoint API 功能是否符合要求?

Retrieves a handle to the window that contains the specified point.

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

还有几个,行为略有不同:ChildWindowFromPoint , ChildWindowFromPointExRealChildWindowFromPoint .

关于mfc - 查找哪个 MFC 子窗口将收到鼠标单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867726/

相关文章:

c++ - 如何在 CWinApp 中获取 WM_POWERBROADCAST 消息?

c++ - 不同语言的 MSVC++ 异常 0x80000003

c++ - 使用相同的窗口类多次调用 RegisterWindow 的副作用?

objective-c - 将鼠标限制在 Mac 上的一个显示器上(可能使用 Cocoa)

c++ - "redo/undo"函数的问题(mfc、c++)

c++ - 无法打开包含文件 'afxwin.h' :no such header fileor directory in vs 2013 c++

c++ - 如何在运行时将编辑样式更改为 ES_NUMBER?

c# - 来自 user32.dll 的 FindWindowEx 使用 dllimport 返回零句柄和 127 错误代码

mouse - 眼动追踪,用于代码编辑

javascript - 在 native JavaScript 中获取 Canvas 内鼠标位置的最现代方法