.net WM_销毁,WM_关闭旁路IMessageFilter
下面是我的邮件过滤器:.net WM_销毁,WM_关闭旁路IMessageFilter,.net,windows,winforms,message-queue,imessagefilter,.net,Windows,Winforms,Message Queue,Imessagefilter,下面是我的邮件过滤器: 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::Writ
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\u close
,WM\u DESTROY
,WM\u NCDESTROY
和WM\u QUIT
)。这是为什么?IMessageFilter。仅对消息队列中的消息调用PreFilterMessage()。WM_CLOSE之类的消息通过SendMessage()直接发送到WndProc(),它们绕过了队列。您也不会得到诸如WM_ACTIVATE、WM_GETTEXT等消息。仅此而已。IMessageFilter.PreFilterMessage()仅对消息队列中的消息调用。WM_CLOSE之类的消息通过SendMessage()直接发送到WndProc(),它们绕过了队列。您也不会收到诸如WM_ACTIVATE、WM_GETTEXT等消息。仅此而已。WM_LBUTTONDOWN呢?我在哪里可以找到哪些消息被直接发送到WndProc,哪些消息被发布到消息队列?WM_LBUTTONDOWN通常是发布的,而不是发送的。这取决于生成消息的代码。那么WM_LBUTTONDOWN呢?我在哪里可以找到哪些消息被直接发送到WndProc,哪些消息被发布到消息队列?WM_LBUTTONDOWN通常是发布的,而不是发送的。这取决于生成消息的代码。