以下是我的消息过滤器:
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等消息.输入事件,就是它.