. 재실행

재실행하는 Redo 함수도 Undo 함수와 유사하다. Undo 함수는 취소 레코드의 기록을 반대로 실행하는데 비해 Redo 함수는 기록된 내용대로 그대로 실행하기만 하면 된다. 그러니 코드는 따로 설명이 필요없을 정도로 단순하다.

 

void CApiEdit::Redo()

{

     int from, to, len;

 

     SelStart=SelEnd=0;

 

     switch (pUR[nowur].action) {

     case UR_INSERT:

          Insert(pUR[nowur].pos,pUR[nowur].data,FALSE);

          off=pUR[nowur].pos+lstrlen(pUR[nowur].data);

          SetCaret();

          Invalidate(-1);

          break;

     case UR_DELETE:

          Delete(pUR[nowur].pos,lstrlen(pUR[nowur].data),FALSE);

          off=pUR[nowur].pos;

          SetCaret();

          Invalidate(-1);

          break;

     case UR_MOVE:

          from=pUR[nowur].pos;

          to=pUR[nowur].dest[0];

          len=pUR[nowur].dest[1];

          CopyString(FALSE,from,to,len,FALSE);

 

          off=to+len;

          SetCaret();

          Invalidate(-1);

          break;

     }

 

     pUR[nowur].status=UR_MAKING;

     NextRecord();

}

 

재실행한 후 statusUR_MAKING으로 만들어 취소된 레코드가 아님을 표시해놓아야 하며 다음 레코드로 이동하여 다음 번 재실행 또는 작성할 때를 대비한다.