您可以截取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,这种方式...
来源
2010-01-19 11:10:27
Goz
在EN_UPDATE ... I g但是我们在控件中做了格式化,我们只想确保用户不能输入格式。 – 2010-01-19 11:19:22
关于“覆盖CRichEditCtrl”,你可以进一步了解更多细节吗?无论如何,这听起来是更好的选择。 – 2010-01-19 11:20:53
真棒回答,感谢您花时间。 – 2010-01-19 13:30:16