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消息被直接发送到的WndProc()用的SendMessage(),它们绕过队列。你也不会得到的消息像WM_ACTIVATE,WM_GETTEXT等输入事件,仅此而已。
不隶属于 StackOverflow