WM_CLOSE

인수

인수 없음

설명

윈도우가 닫히기 전에 이 메시지가 전달되며 메인 윈도우인 경우는 응용 프로그램이 종료된다는 신호이다. 이 메시지를 처리하지 않고 DefWindowProc으로 보내면 DestroyWindow 함수를 호출하여 윈도우를 파괴하도록 한다. 이 메시지가 전달되었을 때는 아직 윈도우가 파괴된 것이 아니므로 윈도우가 파괴되는 것을 중간에 차단할 수 있다. 미저장 파일이 있거나 프로그램을 종료할 상황이 되지 않을 때 사용자에게 메시지 박스를 통해 종료 사실을 확인시킬 수 있으며 이 메시지를 가로채서 단순히 return하면 DestroyWindow가 호출되지 않도록 할 수 있다.

리턴

이 메시지를 처리했으면 0을 리턴한다.

예제

예제 1

다음 예제는 프로그램을 종료하기 전에 사용자에게 메시지 박스로 종료 사실을 확인한다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	TCHAR Mes[]="프로그램을 종료해 보십시오";

	switch(iMessage) {
	case WM_CLOSE:
		if (MessageBox(hWnd,"프로그램을 종료하시겠습니까?",
			"질문",MB_YESNO)==IDNO) {
			return 0;
		} else {
			break;
		}
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

사용자가 '아니오'를 선택하면 return하여 DefWindowProc으로 보내지 않도록 하여 종료 처리를 차단할 수 있다. '예'를 선택하면 break문으로 빠져 나와 디폴트 처리를 하도록 함으로써 프로그램을 종료한다. 미저장 파일이 있을 경우도 메시지 박스를 통해 저장 여부를 확인한다.

WM_DESTROY에서는 이미 윈도우 파괴가 확정된 상태이므로 종료를 거부할 수 없다.

플랫폼

95이상

참조

WM_DESTROY


written by http://www.winapi.co.kr