.새 파일

파일 입출력 동작을 하기 전에 편집하던 문서의 저장 여부 확인이 필요하다. 파일 열기나 파일 작성 등의 명령은 편집하고 있던 문서를 버리는 동작이 선행되어야 하는데 문서를 과연 정말 버려도 되는지 사용자에게 확인을 받을 필요가 있다. 다음 함수는 미저장 문서를 처리한다.

 

int ConfirmSave()

{

   int result=IDNO;

   TCHAR Mes[MAX_PATH+64];

 

   if (bModified) {

      wsprintf(Mes,"%s 파일이 변경되었습니다. 저장하시겠습니까?",NowFile);

      result=MessageBox(hWndMain,Mes,"알림",MB_YESNOCANCEL);

      if (result == IDCANCEL) {

          return IDCANCEL;

      }

      if (result == IDYES) {

          if (Save() == FALSE)

             return IDCANCEL;

          else

             return IDYES;

      }

   }

   return result;

}

 

편집하던 문서가 변경되었다면 파일이 변경되었다는 사실을 사용자에게 메시지 박스로 알리고 이후의 동작을 질문한다. 질문에 대해 사용자는 저장, 버림, 취소 가지 동작을 결정할 있는데 취소할 경우는 IDCANCEL 리턴하기만 하면 된다. 저장할 경우는 Save 함수를 호출하여 미저장 문서를 저장하도록 하되 만약 저장에 실패했다면 IDCANCEL 리턴하고 성공했으면 IDYES 리턴한다. 문서가 전혀 변경되지 않았다면 IDNO 리턴한다.

ConfirmSave 호출하는 측에서는 함수가 IDCANCEL 리턴했는가 아닌가에만 관심을 가지면 된다. 미저장 문서를 성공적으로 저장했건 아니면 문서가 아예 변경되지 않았건 상태는 ConfirmSave안에서 이미 결정난 것이므로 호출측에서는 취소만 아니라면 상태를 똑같이 취급할 있다. , 저장중에 에러로 인해 실패한 경우는 사용자의 지시를 완전히 수행하지 못했으므로 취소와 동일한 상태로 보는 것이 타당하다. 파일을 작성하는 함수는 다음과 같다.

 

void New()

{

   if (ConfirmSave() == IDCANCEL) {

      return;

   }

   FreeDoc();

   InitDoc();

   InvalidateRect(hWndMain,NULL,TRUE);

}

 

FreeDoc, InitDoc 순서대로 호출하여 이전 편집 문서를 재초기화하고 화면을 다시 그리기만 하면 문서를 새로 만들 있다. , 전에 편집하던 문서가 있었다면 ConfirmSave 호출하여 문서를 어떻게 처리할 것인지를 먼저 확인받아야 한다. 질문에 대해 사용자는 미저장 문서를 저장하거나 아니면 버릴 있는데 경우는 사용자의 선택에 상관없이 파일 만들기를 계속할 있다. 만약 취소를 선택했다면 이때는 파일 동작 자체를 취소해야 한다.