KeyboardProc 回调函数 - 如何知道 window 将获得密钥

KeyboardProc callback function - how to know window that will get the key

我有一个使用 MFC 的大型 C++ 遗留应用程序。

在整个 UI(视图、对话框、从 CWnd 派生的自定义控件)的不同位置,我收到 WM_KEYDOWN 消息以将一些信息复制到剪贴板以用于测试目的。例如grid/list在特定时刻的内容。

我想使用键盘挂钩来集中执行所有这些测试挂钩,但我不知道如何获得最终会获得 WM_KEYDOWN 消息的 window。

例如,如果用户在网格控件中按 Ctrl+I(焦点在控件本身),我想调用网格中的一个函数,用于将网格的信息(行、列等)复制到剪贴板。但是如果焦点在对话框的任何其他控件中,我想调用对话框的方法导出对话框的信息。

这是回调的语法:

LRESULT CALLBACK KeyboardProc( int代码中, WPARAM wParam, In LPARAM lParam );

但是没有获得焦点的CWnd的信息,所以会得到key down消息。

您最好的选择是安装另一个挂钩来监视 window 上的焦点设置。使用 CBTProc 并监听 HCBT_SETFOCUS 将允许您确定即将获得焦点的 window。由于 window 获得焦点的句柄作为该挂钩的一部分提供,您可以将其存储起来以供其他挂钩使用。