더북(TheBook)

7.4.3 모든 창 닫기 기능 추가

ImageTool 프로그램에서 비트 평면 분할을 하면 한꺼번에 8개의 창이 화면에 나타난다. 이 뿐만 아니라 ImageTool 프로그램에서 다른 영상 처리 메뉴를 실행할 때마다 새 창이 뜨기 때문에 종종 너무 많은 창이 화면에 떠 있게 된다. 이러한 창들을 한꺼번에 닫아버리는 기능을 하나 추가하면 편리할 것 같다. 실제로 다른 영상 편집 프로그램에도 이러한 ‘모든 창 닫기’ 기능이 구현되어 있는 것을 찾아볼 수 있다.

Visual Studio 리소스 뷰에서 IDR_ImageToolTYPE 메뉴 항목을 더블 클릭하여 메뉴 편집 창이 나타나게 한 후, 그림 7-20과 같이 [모든 창 닫기] 메뉴 항목을 추가하자. 윈도우 창을 모두 닫는 기능이므로, [창] 팝업 메뉴 아래에 새 메뉴 항목을 추가하자. [모든 창 닫기] 메뉴 항목의 속성은 표 7-10을 참고하라.

그림 7-20 [모든 창 닫기] 메뉴 항목 추가
표 7-10 [모든 창 닫기] 메뉴 항목 속성

ID

Caption

ID_WINDOW_CLOSEALL

모든 창 닫기(&W)

메뉴 항목을 추가하였으면, 이 메뉴 항목을 처리하는 메뉴 이벤트 처리기를 추가하자. [모든 창 닫기] 메뉴에 대한 이벤트 처리기 마법사에 입력할 정보는 표 7-11을 참고하라. 이벤트 처리 함수가 추가되는 클래스가 CImageToolApp 클래스임을 주의하기 바란다. 메뉴 이벤트 처리 함수 OnWindowCloseall에 추가할 소스 코드는 소스 7-15에 나타내었다.

표 7-11 [모든 창 닫기] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_WINDOW_CLOSEALL

CImageToolApp

COMMAND

OnWindowCloseall

소스 7-15 모든 창 닫기 메뉴 이벤트 처리 함수(ImageTool.cpp)
void CImageToolApp::OnWindowCloseall()
{
    CloseAllDocuments(TRUE);
}

OnWindowCloseall 함수에서는 CloseAllDocuments라는 하나의 함수를 호출하고 있는데, 이 함수는 CImageToolApp 클래스의 상위 클래스인 CWinApp 클래스의 멤버 함수이다. CloseAllDocuments 함수의 원형은 다음과 같다.

void CloseAllDocuments(BOOL bEndSession);

이 함수는 원래 프로그램이 종료되기 전에 사용되어 현재 열려 있는 모든 도큐먼트와 창을 닫을 때 사용되는 함수이다. 함수의 인자 bEndSession에는 TRUE를 전달하던 FALSE를 전달하던 실제 동작에는 차이가 없다. 위 코드를 추가한 후 ImageTool 프로그램을 실행하여 [모든 창 닫기] 메뉴가 정상적으로 동작하는지 확인해보기 바란다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.