TRichEdit 暂停/恢复撤销功能

4

有没有一种方法可以暂停/恢复 TRichEdit 控件中的撤消记录? 有发送消息或设置模式的消息吗?

编辑
我通过使用 ITextDocument 接口来解决了这个问题。请参见我下面的帖子。

2个回答

6

好的,我解决了这个问题。

你需要使用 ITextDocument 接口来设置各种撤消模式。在这个例子中,Script_Edit 是一个 TRichEdit 控件。

#include <Richole.h>
#include <Tom.h>

// Define the ITextDocument interface GUID
#define DEFINE_GUIDXXX(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
        EXTERN_C const GUID CDECL name \
                = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }

DEFINE_GUIDXXX(IID_ITextDocument,0x8CC497C0,0xA1DF,0x11CE,0x80,0x98,
                0x00,0xAA,0x00,0x47,0xBE,0x5D);

IRichEditOle  *IRich;
ITextDocument *IDoc;

// Get the IRichEditOle interface object
SendMessage(Script_Edit->Handle,EM_GETOLEINTERFACE,0,(LPARAM)&IRich);

// Get the ITextDocument interface
IRich->QueryInterface(IID_ITextDocument,(void**)&IDoc);

// Suspend the Undo recording
IDoc->Undo(tomSuspend,NULL);

 ... Do your stuff ...

// Resume the Undo recording
IDoc->Undo(tomResume,NULL);

// Release the interfaces
IDoc->Release();
IRich->Release();
ITextDocument->Undo() 可用于以下情况:
ITextDocument->Undo(tomFalse,   NULL); //Prevents Undo and empties buffer.
ITextDocument->Undo(tomTrue,    NULL); //Restarts Undo again.
ITextDocument->Undo(tomSuspend, NULL); //Suspends Undo.
ITextDocument->Undo(tomResume,  NULL); //Resumes Undo.

我希望这对其他人也有用...

1

查看EM_SETUNDOLIMIT消息:

设置富文本控件中可以存储的撤销操作的最大数量。

参数

wParam 指定可以存储在撤销队列中的最大操作数。

lParam 此参数未使用;必须为零。

返回值

返回值是富文本控件的新最大撤销操作数。如果内存有限,则此值可能小于wParam。

备注

默认情况下,撤销队列中的最大操作数为100。如果增加此数字,则必须有足够的可用内存来容纳新数字。为了获得更好的性能,请将限制设置为可能的最小值。

将限制设置为零将禁用撤销功能。


1
谢谢你的建议,但是它也清除了撤销缓冲区。我只想暂停缓冲区。最终我解决了这个问题。 - Max Kielland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接