我正在使用CRichEditCtrl来编辑计算机语言,并且在每次更改时我都会在当前文本行上调用SetSelectionCharFormat(由LineFromChar(-1)报告)以突出显示语法。 (EG:绿色注释,部分标题用更大的字体,红色的编译错误等)注意这种语言没有多行功能,例如C注释,其中在一行上键入/ *使得后续行成为评论也是;对于任何给定的字符更改,我只需要更改当前行的颜色。
这一切看起来都很好。
然而,有一些奇怪的问题。一种是,当从其他地方选择多行文本并粘贴时。我的OnUpdate()被调用但天真地假设可能需要重新格式化的唯一行是LineFromChar()返回的行。当用户逐个字符地键入时,这就足够了,但这意味着在接收到多行粘贴后,程序仅重新格式化粘贴文本的最后一行。 如何知道插入的开始的位置?
答案 0 :(得分:1)
在粘贴操作中调用OnUpdate。
应该可以对RTF控件进行子类化并拦截WM_PASTE消息。如果未在内部使用WM_PASTE,则可以使用EM_PASTESPECIAL。如果没有发送tis消息,则必须截取导致粘贴操作的Ctrl + V.
您可以确定粘贴操作的起始位置。
Spy ++可能有助于确定RTF控件中的消息流。