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

问题描述 投票:2回答:3

如何阻止用户更改Win32 Rich Edit控件中的文本以外的任何内容?

(即他们不应该能够改变任何文本的格式,添加图形等;如果他们复制粘贴新文本,只应保留文本,并且应该丢弃相关的格式。)

winapi richedit text-formatting
3个回答
1
投票

我从来没有找到一种特别优雅的方法来解决这个问题:我过去所做的是:

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。)

我不是很漂亮,但是它看起来很有效。


3
投票

这个答案可能有点迟了但是对于其他寻找这个问题答案的人来说,我发现在Rich编辑控件中完全控制粘贴操作的最好方法是提供IRichEditOleCallback::QueryAcceptData的实现,然后返回S_FALSE到将它们全部停在一起或通过更改lpcfFormat参数来过滤掉某些剪贴板格式。

MFC中的CRichEditView :: QueryAcceptData函数提供了一个很好的例子来说明如何做到这一点。这适用于各种粘贴操作,包括拖放操作,因此是完全控制所发生情况的最佳方式。


2
投票

甚至更晚:)

SendMessage(wndEdit, EM_SETEDITSTYLE, SES_EMULATESYSEDIT, SES_EMULATESYSEDIT)

似乎可以做到这一点:粘贴纯文本,并禁用格式化热键。

SES_EMULATESYSEDIT:当此位打开时,富编辑尝试模拟系统编辑控件(默认值:0)。

您仍然保留了richedit的一些“奖励”功能,例如按需滚动条。

© www.soinside.com 2019 - 2024. All rights reserved.