C++ CRICHEDITCRL OnUpdate():如何在收到粘贴时知道开始和结束位置?

C++ CRICHEDITCRL OnUpdate():如何在收到粘贴时知道开始和结束位置?,c++,mfc,onupdate,cricheditctrl,C++,Mfc,Onupdate,Cricheditctrl,我使用CRichEditCtrl编辑计算机语言,每次对其进行更改时,我都会在当前文本行上调用SetSelectionCharFormat(由LineFromChar(-1)报告),以突出显示语法。(例如:绿色的注释、较大字体的章节标题、红色的编译错误等)注意,这种语言没有多行功能,例如在一行上键入/*会使下面几行也成为注释的一部分的C注释;对于任何给定的字符更改,我只需要更改当前行的颜色 看起来一切都很好 然而,也有一些奇怪的问题。一种是,当从其他地方选择多行文本并粘贴时。调用了My OnUpd

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

看起来一切都很好


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

应该可以对RTF控件进行子类化,并截获WM_粘贴消息。如果WM_PASTE未在内部使用,则可以使用EM_PASTE Special。即使未发送此消息,也必须插入导致粘贴操作的Ctrl+V

然后可以确定粘贴操作的起始位置


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

thx xMRi。。。我将尝试Spy++并观察您描述的消息,或任何其他可能的外观。