Вы могли бы перехватить инструкцию EN_UPDATE и переформатировать текст, когда получите это? Единственная проблема в том, что вы не знаете, какие новые данные были добавлены.
Возможно, вам будет проще переопределить CRichEditCtrl вашим собственным и перехватить любые сообщения, которые вы хотите обработать, для входящих данных, а затем вызвать реализацию этой функции родительским классом. Таким образом, каждый раз, когда что-то добавляется, вы выполняете необходимые переформатирования ...
Редактировать: получить класс из CRichEditCtrl довольно просто
class CMyRichEditCtrl : public CRicheditCtrl
{
DECLARE_DYNAMIC( CMyRichEditCtrl )
protected:
DECLARE_MESSAGE_MAP()
public:
CMyRichEditCtrl();
virtual ~CMyRichEditCtrl();
// ... Rest of implementation here
};
Затем вы можете перехватывать сообщения в карте сообщений следующим образом ...
ON_MESSAGE( EM_PASTESPECIAL, &CMyRichEditCtrl::OnPasteSpecial )
и ваш обработчик будет выглядеть так:
LRESULT CMyRichEditCtrl::OnPasteSpecial( WPARAM wParam, LPARAM lParam )
wParam - это формат буфера обмена, а lParam содержит структуру NULL или REPASTESPECIAL.
Все, что вам затем нужно сделать, - это убедиться, что ваш класс - это тот, который получает все сообщения и который можно легко сделать с помощью функции DoDataExchange.
Определите переменную-член как:
CMyRichEditCtrl m_MyRichEditCtrl;
и добавьте в DoDataExchange следующее:
DDX_Control( pDX, IDC_MYRICHEDIT, m_MyRichEditCtrl );
Все сообщения теперь будут перенаправляться через вашу реализацию RichEditCtrl
Таким способом вы можете перехватить любое сообщение, включая WM_PASTE ...