1

我正在使用 CRichEditCtrl 来编辑计算机语言,并且在对其进行每次更改时,我都会在当前文本行(由 LineFromChar(-1) 报告)上调用 SetSelectionCharFormat 以突出显示语法。(例如:绿色的注释,大字体的部分标题,红色的编译错误等)请注意,这种语言没有多行功能,例如 C 注释,其中在一行上键入 /* 会使以下行成为也有评论;对于任何给定的字符更改,我只需要更改当前行的颜色。

一切看起来都很好。

不过也有一些奇怪的问题。一种是,当从其他地方选择多行文本并粘贴时。我的 OnUpdate() 被调用,但天真地假设唯一可能需要重新格式化的行是 LineFromChar() 返回的行。这在用户逐个字符输入时就足够了,但这意味着在收到多行粘贴后,程序只会重新格式化粘贴文本的最后一行。 它怎么知道插入的开始在哪里?

4

1 回答 1

1

OnUpdate 在粘贴操作中被调用。

应该可以对 RTF 控件进行子类化并拦截 WM_PASTE 消息。如果内部未使用 WM_PASTE,则可以使用 EM_PASTESPECIAL。如果连 tis 消息都没有发送,您必须拦截导致粘贴操作的 Ctrl+V。

比您可以确定粘贴操作的起始位置。

Spy++ 可能有助于确定 RTF 控件中的消息流。

于 2014-01-05T20:57:34.650 回答