我有一个使用MFC的大型C++遗留应用程序。
在整个UI的不同位置(视图、对话框、从CWnd派生的自定义控件),我得到WM_KEYDOWN消息,将一些信息复制到剪贴板以进行测试。例如,网格/列表在特定时刻的内容。
我想使用键盘挂钩来集中所有这些测试挂钩的实现,但我不知道如何获得最终将获得WM_KEYDOWN消息的窗口。
例如,如果用户在网格控件中按下Ctrl+I(焦点在控件本身),我想调用网格中的一个函数,将网格的信息(行、列等)复制到剪贴板。但如果焦点在对话框的任何其他控件中,我想调用对话框的方法导出对话框的信息。
这是回调的语法:
LRESULT CALLBACK键盘过程(在int代码中,在WPARAM WPARAM中,在LPARAM LPARAM中);
但没有关于CWnd的信息可以作为重点,因此会得到关键的消息。
您的最佳选择是安装另一个挂钩来监控窗口上焦点的设置。使用CBTProc并监听HCBT_SETFOCUS将允许您确定即将获得焦点的窗口。由于获得焦点的窗口句柄是作为钩子的一部分提供的,因此您可以将其存储起来,以便与其他钩子一起使用。