关于CRichEditCtrl的问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 09:39:44
为什么在OnEnChange()里调用SetSelectionCharFormat后, ctrl+z不能正常工作?
没调用SetSelectionCharFormat的情况下是可以正常撤消的. 感觉上就像是SetSelectionCharFormat这个动作也当作是可撤消动作放到队列里面了.ctrl+z后只选中了最后一串被格式化的文本, 而没有撤消上一次输入的内容.
我现在需要在每次内容变更后对文本格式化(改变颜色之类的), 也需要正常的撤消动作, 应该怎么做?
回blindwood:
那个消息发出去作用是初始化?
那这样做是不是SetSelectionCharFormat就不会被当作可撤消动作了?
结果发现CRichEditCtrl基本不符合自己的需求...连带动作太多了...结了结了. 自己做好了.

RichEditCtrl默认只能Undo一次。
SetSelectionCharFormat这个动作也当作是可撤消动作放到队列里面了.
所以Ctrl+Z只是撤销SetSelectionCharFormat这个动作,所以表现起来就是把最后格式化的文本选中。

你说的这种情况需要用多步撤销
使用richedit 2.0
richEdit.SendMessage(EM_SETTEXTMODE, TM_MULTILEVELUNDO);
发送该消息之前richEdit的内容必须为空
richedit 1.0是不支持EM_SETTEXTMODE的。

LoadLibrary("Riched20.dll");
richedit改为动态创建

回复问题补充:这样只是允许多步撤销,SetSelectionCharFormat还是需要撤销的,你需要自己记录操作步骤才能精确定位到撤销回的状态