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 获得焦点的句柄作为该挂钩的一部分提供,您可以将其存储起来以供其他挂钩使用。
我有一个使用 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 获得焦点的句柄作为该挂钩的一部分提供,您可以将其存储起来以供其他挂钩使用。