. 최후 상태로 되돌리기

이 기능은 문서를 열어서 편집하다가 디스크에 마지막 저장된 상태로 되돌리고 싶을 때 사용한다. 편집 취소 기능이 들어갈 예정이지만 너무 많이 편집했을 경우에는 이 명령으로 다시 파일을 읽는 것이 더 빠르다. 매크로를 잘못 돌렸거나 너무 많은 양을 지웠을 때는 이 명령으로 파일을 다시 읽어 들이면 된다. 편집기의 필수 기능은 아니지만 있으면 유용한 기능이며 별로 어렵지도 않다. 다음 함수가 파일을 되돌린다.

 

void RevertFile(HWND hChild)

{

     SInfo *pSi;

 

     pSi=(SInfo *)GetWindowLong(hChild,0);

     OpenFileToChild(hChild,pSi->NowFile);

     if (GetFileAttributes(pSi->NowFile) & FILE_ATTRIBUTE_READONLY) {

          pSi->Ae.SetReadOnly(TRUE);

     }

}

 

편집하고 있던 파일이므로 새로 창을 만들 필요도 없고 OpenFileToChild 함수로 다시 읽어들이기만 하면 된다. 혹시 읽기전용 파일이라면 다시 읽기전용 상태로 만들어야 한다. OnCommand에서 이 함수를 호출한다.

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     TCHAR Mes[512];

 

     switch(LOWORD(wParam)) {

     ....

     case IDM_FILE_REVERT:

          wsprintf(Mes,"%s 파일을 최후 저장된 상태로 다시 읽으시겠습니까?\r\n"

              "지금까지 편집된 모든 내용을 잃게 됩니다.",pSi->NowFile);

          if (MessageBox(g_hFrameWnd,Mes,"질문",MB_YESNO)==IDYES) {

              RevertFile(hActive);

          }

          break;

 

파일 되돌리기 기능은 지금까지 편집하던 모든 내용을 다 버리는 다소 위험한 명령이므로 사용자의 확인을 거치도록 하였다. OnInitMenu에서는 이 메뉴를 적절하게 관리한다.

 

void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     if (hActive) {

          ....

          if (pSi->Ae.GetModified() && strncmp(pSi->NowFile,"이름없음",8)!=0) {

              EnableMenuItem(hMenu, IDM_FILE_REVERT, MF_BYCOMMAND | MF_ENABLED);

          } else {

              EnableMenuItem(hMenu, IDM_FILE_REVERT, MF_BYCOMMAND | MF_GRAYED);

          }

     }

}

 

이 기능이 사용 가능하려면 일단은 변경된 파일이어야 하며 디스크에 있는 파일이어야 한다. 새로 만든 파일은 아직 디스크에 저장되지 않았으므로 되돌리기 기능을 사용할 수 없다.