个CEditRecord对象。
下面给出一个例子说明如何建立CEditRecord对象,为方便计,假设进行的操作是从一个全局性的字符串pText中删除一段内容,我们用Pos表示所删内容在pText中的相对位置, 用Len表示所删内容的长度,并假设全局串pTetx的存储空间足够大。
1.从基类CEditRecord上派生出CEditCutString;
2.设置私有变量Pos、Len用于表示所删内容在pText中的相对位置、长度;设置私有变量pBuff用于分配存储空间,保存所删内容;设置私有变量Avialiable用于表示可否进行Undo/Redo。
/////////////////////////////////////////////////////
// Example
//
#include "CEditRecord.h"
class CEditCutString:public CEditRecord
{
public:
CEditCutString(int,int);
~CEditCutString();
private:
int Pos;
int Len;
char* pBuff;
BOOL Avialiable;
public:
virtual BOOL Undo();
virtual BOOL Redo();
};
CEditCutString::CEditCutString(int p,int n)
{
Pos=p;
Len=n;
pBuff=new char[n];
if(pBuff==NULL)
Avialiable=FALSE;
esle
{
Avialiable=TRUE;
memcpy(pBuff,pText+Pos,Len);
}
}
CEditCutString::~CEditCutString
{
if(Avialiable)
delete pBuff;
}
BOOL CEditCutString::Undo()
{
if(!Avialiable)
return FALSE;
int l=strlen(pText);
for(int i=l;i>=Pos;i--)
pText[i+Len]=pText[i];
for(int j=0;j<Len;j++)
pText[Pos+j]=pBuff[j];
return TRUE;
}
BOOL CEditCutString::Redo()
{
if(!Avialiable)
return FALSE;
int l=strlen(pText);
for(int i=Pos;i<=l-Len;i++)
pText[i]=pText[i+Len];
return TRUE;
}