我注意到控件处于焦点状态时,按CTRL键时,RichEdit不会将消息发送到父窗口。当父窗口处于 Activity 状态时,一切正常。但是,当光标位于RichEdit中时,只有鼠标0x20 WM_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);
}

关于c++ - 如何检测是否在子窗口即按下ctrl键。 richedit是焦点吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14385117/

10-11 18:26