丰富的编辑控件:防止丰富的格式?

| 如何防止用户更改Win32 Rich Edit控件中的文本以外的其他内容? (即,他们不应该能够更改任何文本的格式,添加图形等;如果他们复制粘贴新文本,则仅应保留该文本,并且应丢弃相关的格式。)     
已邀请:
我从未找到一种特别优雅的方式来处理此问题:过去我所做的是: 1)捕获控件的WM_KEYDOWN消息并丢弃所有格式键(Ctrl + E,J,R,L,1、2、5,+和Ctrl + Shift + A,7) 2)通过捕获ID为ID_EDIT_PASTE的WM_COMMAND消息来捕获所有粘贴操作,并将粘贴消息替换为消息EM_PASTESPECIAL,CF_UNICODETEXT到控件。 (这是使用MFC的:根据您使用的框架或语言,这可能需要捕获Ctrl + V和类似字符,而不是ID_EDIT_PASTE。) 我敢说,它不漂亮,但似乎可行。     
这个答案可能有点晚了,但是对于寻找该问题答案的其他任何人,我发现最好完全控制Rich编辑控件中的粘贴操作的最佳方法是提供
IRichEditOleCallback::QueryAcceptData
的实现,然后返回S_FALSE通过更改lpcfFormat参数将它们全部停止或滤除某些剪贴板格式。 MFC中的CRichEditView :: QueryAcceptData函数提供了一个很好的示例。这将适用于所有粘贴操作,包括拖放操作,因此这是完全控制发生情况的最佳方法。     
甚至以后:)
SendMessage(wndEdit, EM_SETEDITSTYLE, SES_EMULATESYSEDIT, SES_EMULATESYSEDIT)
似乎可以解决问题:粘贴粘贴纯文本,然后禁用格式设置热键。   SES_EMULATESYSEDIT:该位打开时,丰富编辑将尝试模拟系统编辑控件(默认值:0)。 您仍然保留richedit的某些“奖励”功能,例如按需滚动条。     

要回复问题请先登录注册