Windows 프로그램에서 WM_QUIT, WM_CLOSE 및 WM_DESTROY의 차이점은 무엇입니까?
Windows 프로그램에서 WM_QUIT, WM_CLOSE 및 WM_DESTROY 메시지의 차이점이 무엇인지 궁금합니다. 기본적으로 메시지가 언제 전송되고 프로그램에서 정의한 것 외에 자동 효과가 있습니까?
그들은 완전히 다릅니다.
WM_CLOSE"X"를 누르거나 창 메뉴에서 "닫기"를 선택하면 창으로 전송됩니다. 이 메시지를 잡으면이 메시지를 처리하는 방법이 호출됩니다. 무시하거나 창을 실제로 닫으십시오. 기본적으로에 WM_CLOSE전달 DefWindowProc하면 창이 파괴됩니다. 창이 파괴 될 때 WM_DESTROY메시지가 전송됩니다. 이 단계에서는과 반대로 WM_CLOSE프로세스를 중지 할 수 없으며 필요한 정리 만 수행 할 수 있습니다. 그러나 WM_DESTROY모든 자식 창이 이미 파괴되기 직전에 잡을 때를 기억하십시오 . WM_NCDESTROY모든 자식 창이 파괴 된 직후에 전송됩니다.
WM_QUIT메시지를 모든 창 관련이 없습니다합니다 ( hwnd에서 가져온 GetMessageNULL이고 어떤 윈도우 프로 시저가 호출되지 않음). 이 메시지는 메시지 루프를 중지하고 응용 프로그램을 닫아야 함을 나타냅니다. GetMessage읽을 때 WM_QUIT0을 반환하여이를 나타냅니다. 일반적인 메시지 루프 스 니펫을 살펴보십시오. 루프는 GetMessage0이 아닌 값 을 반환 하는 동안 계속 됩니다. 기능별 WM_QUIT로 보낼 수 있습니다 PostQuitMessage. 이 함수는 일반적으로 주 창이 수신 될 때 호출됩니다 WM_DESTROY( 일반 창 프로 시저 스 니펫 참조 ).
우선, WM_CLOSE 및 WM_DESTROY 메시지는 특정 창과 연결되어있는 반면 WM_QUIT 메시지는 전체 응용 프로그램 (웰 스레드)에 적용되며 메시지는 창 프로 시저 ( WndProc루틴)를 통해 수신되지 않고 GetMessage또는 PeekMessage함수를 통해서만 수신됩니다 .
당신의에서 WndProc루틴 DefWindowProc기능은 이러한 메시지의 기본 behavoir을 담당한다. WM_CLOSE의 응용 프로그램을 닫고이에 대한 기본 behavoir해야한다는 메시지 요청이 호출하는 DestroyWindow기능. 이 DestroyWindow함수가 호출되면 WM_DESTROY 메시지가 전송됩니다. 을 주목하는 것이 WM_CLOSE가 가까운 (같은 당신 것을 요청 만 메시지입니다 WM_QUIT가 ) - 당신이 실제로 종료하지 않아도 / 종료합니다. 그러나 WM_DESTROY의 창문이 있다는 메시지를 알려줍니다 IS 모든 자원, 핸들 등이 정리해야하므로 폐쇄 및 파괴
댓글에서 길을 잃지 않도록 ... 잊지 마세요 WM_CANCEL. MFC 대화 상자에서 닫기 (x) 버튼을 클릭하면 확실히 WM_CLOSE. 그러면 기본 OnClose()함수가 기본 (기본 클래스) OnCancel()함수 를 호출합니다 .
그러나 단순히 ESC키 를 입력하면 대화 상자가 닫히지 만 WM_CLOSE이벤트 를 생성하지 않고 (내가 말할 수 있는 한) WM_CANCEL/OnCancel()메커니즘 으로 직접 이동합니다 .
이로써 커뮤니티가 이에 대해 자세히 설명하거나 해당 내용을 수락 된 답변으로 편집하도록 초대합니다.
먼저 WM_QUIT에 대해 논의 해 보겠습니다. 이것은 윈도우와 관련이없는 다른 메시지와의 차이점입니다. 응용 프로그램에서 사용됩니다. 예를 들어, 이것은 보이지 않는 독립 실행 형 OLE 서버 (.exe, .dll과 같은 in-proc가 아님)에서 처리 할 수 있습니다.
WM_CLOSE-msdn 별 : " 응용 프로그램은 창을 제거하기 전에 사용자에게 확인을 요청할 수 있습니다. "-닫을 의도에 대한 알림으로 사용됩니다 (이 의도를 거부 할 수 있음).
WM_DESTROY-창이 닫히고 모든 리소스가 할당 해제되어야한다는 사실입니다.
'program story' 카테고리의 다른 글
| jQuery에서 문자열을 어떻게자를 수 있습니까? (0) | 2020.11.29 |
|---|---|
| 다각형 교차를위한 간단한 알고리즘 (0) | 2020.11.28 |
| PHP에서 HTML 양식 입력 기본값을 올바르게 이스케이프하는 방법은 무엇입니까? (0) | 2020.11.28 |
| 아무것도 출력하지 않는 Python 로깅 (0) | 2020.11.28 |
| Akka-액터의 인스턴스를 몇 개 만들어야합니까? (0) | 2020.11.28 |