您可以拦截 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 ...