. 모두 저장

모두 저장, 모두 닫기 기능은 열린 모든 파일에 대해 저장, 닫기를 한다. MDI 프로그램의 특성상 많은 파일들을 동시에 편집할 수 있기 때문에 한꺼번에 저장하거나 닫는 명령이 있어야 한다. 이 두 기능은 다음 함수들에 의해 구현된다.

 

void SaveAll()

{

     HWND hChild;

     hChild=GetWindow(g_hMDIClient,GW_CHILD);

     while (hChild) {

          if (Save(hChild)==FALSE) {

              return;

          }

          hChild=GetWindow(hChild,GW_HWNDNEXT);

     }

}

 

void CloseAll()

{

     HWND hChild, hChild2;

 

     hChild=GetWindow(g_hMDIClient,GW_CHILD);

     while (hChild) {

          hChild2=GetWindow(hChild,GW_HWNDNEXT);

          if (SendMessage(hChild,WM_CLOSE,0,0)==1) {

              return;

          }

          hChild=hChild2;

     }

}

 

모든 차일드를 순회하면서 Save 함수를 호출하거나 WM_CLOSE 메시지를 보내면 된다. 너무 간단해서 별로 설명할 것도 없는 지경이다. WM_CLOSE를 보낸 결과 1이 리턴되었다면 사용자가 닫기를 취소한 것이므로 모두 닫기 동작도 취소하도록 하였다. 이 두 함수도 OnCommand에서 호출된다.

 

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

{

     ....

     case IDM_FILE_SAVEALL:

          SaveAll();

          break;

     case IDM_FILE_CLOSEALL:

          CloseAll();

          break;

 

이 두 명령은 항상 사용 가능하므로 OnInitMenu에서 별도로 관리하지 않아도 된다.