/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
출처: http://www.kkangtong.net/118
※ WM_SYSCOMMAND → WM_CLOSE → WM_DESTROY → WM_QUIT
1. WM_CLOSE
- 윈도우가 닫히기 전에 메시지가 전달 된다.
- 아직 윈도우가 파괴된 것은 아니므로 윈도우가 파괴되는 것을 중간에 제어 할 수 있다.
- 윈도우의 “닫기” 를 누르거나, 키보드의 “Alt + F4”를 눌렀을 경우 발생
- WM_CLOSE 의 핸들러(OnClose) 에서 추가적인 제어를 하지 않는다면 메시지는
DefWindowsProc 로 보내진다.
- CDialog::OnClose() 는 내부적으로 DestroyWindow() 함수를 호출 한다.
- DestroyWindow() 함수는 내부적으로 WM_DESTROY 메시지를 발생 시킨다.
2. DestroyWindow()
- CWnd내부에 있는 윈도우를 destroy 한다.
- 윈도우를 해제하고 입력 포커스를 제거하기 위한 적절한 message를 윈도에게 보낸다.
- 윈도우의 메뉴 제거
- application queue를 비운다.
- timer를 제거
- Clipboard의 소유주 제거
- Clipboard-viewer chain을 끊는다. ( CWnd가 viewer chain의 맨 위에 있을 경우 )
- WM_DESTROY(OnDestroy)와 WM_NCDESTROY(OnNcDestroy) 메시지를 윈도우 에게 보낸다.
하지만 아직 CWnd 객체는 destroy하지 않는다.
3. WM_DESTROY
- Framework이 CWnd에게 현재 CWnd가 소멸되고 있는 중이라고 알려 주기 위하여 호출
- 화면에 윈도우를 숨긴 후 메시지 발생, 아직 윈도우 자체는 파괴되지 않았다
- DestroyWindows() 함수에서 발생 시킨다.
- WM_CREATE 에 반대되는 동작을 수행 한다.
- 차일드 윈도우가 있다면 이 메시지를 차례대로 전달 한다.
- 메인 윈도우에서 PostQuitMessage() 함수를 반드시 호출하여 프로세스의 메시지 루프
를 종료시켜야 한다. 그렇지 않다면 윈도우만 파괴되고 메시지 루프는 계속 실행중인
상태가 되므로 프로세스가 종료되지 않는다.
4. WM_NCDESTROY
- Client 영역이 아닌 영역이 Destroy 될 때 Framework 에 의하여 불려짐.
- 윈도우가 소멸될 때 마지막으로 호출되는 메시지
- 핸들러를 재정의 한다면 기본 호출 함수를 가장 위에서 해주자.
5. PostNcDestroy()
- 윈도우가 소멸된 후 OnNcDestroy() 함수에 의해 불려지는 함수
- 사용자들이 상속받아 만든 클래스의 정리를 위한 코드를 넣음.
6. View가 닫혀질 때 호출되는 핸들러 순서
BOOL CAniView::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
// 윈도우가 안보여 지기전에 해야 할 작업 처리
return CView::DestroyWindow();
}
void CAniView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
}
void CAniView::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
CView::PostNcDestroy();
}
7. WM_QUIT
- 응용프로그램을 종료 하라는 메시지
- PostQuitMessage() 가 발생 시키는 메시지
- GetMessage() 함수가 0 을 리턴하도록 함으로써 메시지 루프를 종료
- PeekMessage() 함수는 따로 WM_QUIT 메시지를 점검해야 한다.
자료 출처 : http://six605.tistory.com/257
출처: http://www.kkangtong.net/118 [피로그래머 깡통..]
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'프로그래밍 관련 > MFC' 카테고리의 다른 글
[MFC] OnSize 이벤트 발생 시키기 (0) | 2017.08.01 |
---|---|
[MFC] OnSize 관련 (0) | 2017.07.25 |
C/C++ MFC Thread에서 Dialog의 UpdateData()사용하는 방법 (0) | 2017.07.11 |
[MFC] MFC에서 UI Thread MFC 스레디 관련, 스레드 중 관련 UI 생성 관련 (0) | 2017.06.01 |
C, C++ MFC 컨트롤, 프레임 디자인 하기 관련 (0) | 2017.05.31 |