wm_destroy, wm_close 우회 ImessageFilter
-
21-08-2019 - |
문제
아래는 내 메시지 필터입니다.
bool MyFilter::PreFilterMessage(Message %m){
switch(m.Msg){
case WM_CLOSE:
case WM_DESTROY:
case WM_NCDESTROY:
case WM_QUIT:
Debug::WriteLine(L"Gone!");
break;
case WM_MOUSEMOVE:
Debug::WriteLine(L"A mouse! Catch! Catch!!! CATCH!!");
break;
}
return false;
}
문제없이 대부분의 메시지를 필터링하고 있음을 확인했습니다. 그러나 창의 닫기 버튼을 클릭 한 후에는 아무런 메시지가 발송되지 않습니다 (WM_CLOSE
, WM_DESTROY
, WM_NCDESTROY
그리고 WM_QUIT
). 왜 이런거야?
해결책
ImessageFilter.prefiltermessage ()는 메시지 큐의 메시지 만 호출됩니다. WM_CLOSE와 같은 메시지는 sendMessage ()와 함께 wndproc ()로 직접 전송되며 큐를 우회합니다. 또한 wm_activate, wm_gettext 등과 같은 메시지를받지 못합니다. 입력 이벤트는 그에 관한 것입니다.
제휴하지 않습니다 StackOverflow