MFC CRichEditCtrl:: предпереводное сообщение

#mfc

#mfc

Вопрос:

В ОС Windows 10 в приложении на основе диалогового окна MFC я выделил подкласс CRichEditCtrl, а в PreTranslateMessage я обрабатываю ctrl x. На ctrl x я подтверждаю пользователю, следует ли удалять текст

 case 88: //ctrl x
if(IDNO==AfxMessageBox(_T("Do you want to delete selected text?"),MB_YESNO|MB_ICONQUESTION)) return true;
break;
  

Если я выполняю AfxMessageBox, PreTranslateMessage получает сообщение WM_CHAR с символом x сразу после ctrl x, а в richeditctrl вводится символ x.. Если я не вызываю AfxMessageBox на ctrl x, предварительно переведенное сообщение не получит сообщение WM_CHAR с символом x.

Как избежать получения PreTranslateMessage WM_CHAR с символом x ? Мне нужно подтвердить пользователю, удалять текст или нет?

Спасибо

Комментарии:

1. Недостаточно информации для реальной диагностики проблемы. IDK, где находится статья, в которой показано, как написать вопрос. Но, лично, я бы не стал делать это так, как вы делаете. Вместо этого я бы добавил запись в вашу таблицу ускорителей для Ctrl-X и для команды ID_EDIT_CLEAR. Я бы добавил обработчик команд в класс view или document для ID_EDIT_CLEAR и запросил пользователя там. Затем, если они подтвердят очистку, очистите его с помощью расширенного элемента управления редактированием, но вы делаете что-то нестандартное. Ctrl-X не должен «удалять». Предполагается, что он «вырезается».

2. И действительно, с точки зрения пользовательского интерфейса, мне не нравится, что вы запрашиваете у пользователя удаление в (расширенном) элементе управления редактированием. Включите отмену в элементе управления, чтобы при нажатии Ctrl-X он просто делал то, что должен был делать. Если им это не нравится, они нажимают Ctrl-Z, чтобы отменить.