KeyboardProc回调函数-如何知道将获得密钥的窗口



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

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

我想使用键盘挂钩来集中所有这些测试挂钩的实现,但我不知道如何获得最终将获得WM_KEYDOWN消息的窗口。

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

这是回调的语法:

LRESULT CALLBACK键盘过程(int代码中,WPARAM WPARAM中,LPARAM LPARAM中);

但没有关于CWnd的信息可以作为重点,因此会得到关键的消息。

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

最新更新