본문 바로가기
프로그래밍/MFC (C++)

시스템 종료와 관련된 윈도우 메시지 WM_QUERYENDSESSION, WM_ENDSESSION

by eteo 2023. 11. 2.

 

다이얼로그 종료시 WM_CLOSE 메시지가 전달되지만, 다이얼로그 종료 전 윈도우가 먼저 종료된다면 WM_CLOSE 메시지는 전달되지 않는다. 따라서 응용프로그램이 윈도우 종료 시 수행해야할 작업이 있다면, WM_QUERYENDSESSION, WM_ENDSESSION 메시지 처리를 통해 가능하다.

 

 

 

WM_QUERYENDSESSION

 

시스템 종료 확인 메시지.

윈도우에선 시스템 종료 또는 로그오프 시 WM_QUERYENDSESSION 메시지를 모든 윈도우에 전송하고, 응용프로그램은 이 메시지를 받아서 준비작업을 수행한 뒤 TRUE를 반환하거나 종료를 취소하기 위해 FALSE를 반환할 수 있다.

 

만약 모든 응용프로그램이 TRUE를 반환하면 WM_ENDSESSION 전송 단계로 넘어간다.

 

 

WM_ENDSESSION

 

시스템 종료 메시지

시스템 종료가 결정되었고 곧 종료됨을 알리는 메시지이다.

 

 

 

 

응용프로그램에선 WindowProc 함수를 재정의하여 그 안에서 메시지를 처리하거나 혹은 WM_QUERYENDSESSION 메시지의 핸들러를 등록해 필요한 작업을 수행할 수 있다.

 

LRESULT CMyWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
    // 윈도우 메시지 처리 로직을 여기에 작성합니다.
    switch(message)
    {
    	case WM_QUERYENDSESSION:
        	break;
        // ...
    }
    // 기본적인 메시지 처리를 위해 MFC의 기본 클래스 구현을 호출할 수도 있습니다.
    return CWnd::WindowProc(message, wParam, lParam);
}