【问题标题】:Rich Edit Control: Prevent Rich Formatting?丰富的编辑控制:防止丰富的格式?
【发布时间】:2011-08-29 07:30:07
【问题描述】:

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

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

【问题讨论】:

    标签: winapi richedit text-formatting


    【解决方案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。)

    不漂亮,我承认,但它似乎工作。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        甚至更晚:)

        SendMessage(wndEdit, EM_SETEDITSTYLE, SES_EMULATESYSEDIT, SES_EMULATESYSEDIT)
        

        似乎可以解决问题:粘贴粘贴纯文本,并且禁用格式化热键。

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

        您仍然保留了 Richedit 的一些“额外”功能,例如按需滚动条。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-20
          相关资源
          最近更新 更多