我注意到当控件处于焦点时按下 CTRL 键时,RichEdit 不会向父窗口发送消息。当父窗口处于活动状态时,一切正常。但是当光标在 RichEdit 中时,只有鼠标 0x20WM_SETCURSOR
消息正常。当在没有控制键的情况下按 0x111 键WM_COMMAND
时发送,当我尝试按 CTRL 并在此期间任何其他键(如“S”)用于实现另存为功能时,不会发送任何内容。有没有办法创建对 RichEdit 的回调或以其他方式捕获CTRL+S
?
Escape 也不会向父窗口发送消息。
我注意到当控件处于焦点时按下 CTRL 键时,RichEdit 不会向父窗口发送消息。当父窗口处于活动状态时,一切正常。但是当光标在 RichEdit 中时,只有鼠标 0x20WM_SETCURSOR
消息正常。当在没有控制键的情况下按 0x111 键WM_COMMAND
时发送,当我尝试按 CTRL 并在此期间任何其他键(如“S”)用于实现另存为功能时,不会发送任何内容。有没有办法创建对 RichEdit 的回调或以其他方式捕获CTRL+S
?
Escape 也不会向父窗口发送消息。
找到了如何为richedit设置回调。
DefEditProc = (WNDPROC)SetWindowLong(richeditWindow, GWL_WNDPROC, (long)&richEdit.EditKeyProc);
和之前的代码:
LRESULT EditKeyProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if(uMsg == WM_KEYDOWN) {
if(wParam == 'S' && GetAsyncKeyState(VK_CONTROL));
return 0;
}
return CallWindowProc(DefEditProc, hwnd, uMsg, wParam, lParam);
}
我认为,如果您只想捕获一些特定的快捷键来进行定义的操作(例如 Ctrl+S 进行保存),这不是最好的方法。
我想说正确的方法是使用加速器表。它有两个优点: