Что происходит, когда пользователь запрашивает действие вставки, как правило, когда сообщение WM_COMMAND с идентификатором ID_EDIT_PASTE отправляется в элемент управления rich edit. По умолчанию в MFC это обрабатывается CRichEditCtrl :: OnEditPaste (), который вызывает Paste () для самого элемента управления редактирования.
Я бы выбрал класс для этого из CRichEditCtrl, добавил метод OnEditPaste и направил ему сообщение с помощью
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
декларация, которая должна работать. Кроме того, в вашем PreTranslateMessage вы можете искать WM_COMMAND с wParam ID_EDIT_PASTE.
Кстати, я решил проблему, очень похожую на вашу (вставить без форматирования), просто реализовав OnEditPaste с
void MyRichEdit::OnEditPaste()
{
SendMessage(EM_PASTESPECIAL,CF_UNICODETEXT);
}
Это отвечает на запрос вставки, отправляя сообщение вставки в элемент управления, который настаивает на том, что формат данных представляет собой простой текст.
Наконец, я должен отметить, что вышеупомянутой техники достаточно, чтобы перехватить все вставки, запускаемые из пользовательского интерфейса. Однако он не будет отлавливать программно-запускаемые вставки, когда ваш код отправляет WM_PASTE в элемент управления редактирования. В этих случаях проще всего просто изменить свой код. Однако, если вы действительно хотите перехватывать такие случаи, вам нужно запачкать руки с помощью COM и IRichEditOleCallback :: QueryAcceptData. Но вы почти наверняка не хотите туда идти: -)