Я заметил, что RichEdit не отправляет сообщения в родительское окно при нажатии клавиши CTRL, когда элемент управления находится в фокусе. Когда родительское окно активно, то все идет хорошо. Но когда курсор находится в 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);
}
Я думаю, что это не лучший способ, если вы просто хотите поймать некоторые сочетания клавиш, чтобы выполнить определенные действия, такие как Ctrl + S для сохранения.
Я бы сказал, что правильный путь — это использовать таблицы акселераторов. У него есть два преимущества: