2014-01-17 125 views
1

有沒有辦法在TRichEdit控件中暫停/恢復撤消記錄?是否有消息發送或設置模式?TRichEdit暫停/恢復撤消功能

編輯
我已經通過使用ITextDocument接口解決了它。看到我的帖子下面。

回答

1

好吧我解決了它。

您必須使用ITextDocument接口來設置各種撤消模式。在此示例中Script_EditTRichEdit控件。

#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

+1的嘗試。謝謝你,但你的建議也是清除撤消緩衝區。我只想暫停緩衝區。我最終解決了這個問題。 –