ProcessMessageFilter 被调用仅对张贴消息

ProcessMessageFilter用于监视消息队列中的消息,但不适用于直接通过窗口过程发送的消息。此类消息通常包括键盘和鼠标事件等。若要监视直接发送到窗口过程的消息,则需要使用WH_CALLWNDPROC挂钩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ProcessMessageFilter 被调用仅对张贴消息

ProcessMessageFilter 仅调用的消息将投递到消息队列并且不调用的是直接为窗口过程发送邮件。 因此,该函数不能用于监视发送到一个对话框、 消息框、 菜单或滚动条 (通过"Windows"或由用户) 消息。

从 _AfxMsgFilterHook,即为 WH_MSGFILTER 挂钩 MFC 挂钩过程时,将调用 ProcessMessageFilter。 此挂钩过程将由系统调用后生成的输入一个消息 (事件对话框、 消息框,菜单或滚动条) 从消息队列中检索。 since messages sent directly to window procedure (by SendMessage) do not go through message queue,this hook procedure is not called by Windows。 this in turn blocks to ProcessMessageFilter call。

更多信息
此 WH_MSGFILTER 挂钩是使应用程序能够监视邮件传递给一个菜单、 滚动条、 消息框或对话框由安装挂钩过程的应用程序创建的一个特定于任务的挂钩。 在典型的 MFC 应用程序在全局函数 AfxWinInit(),和包含 _AfxMsgFilterHook 为回调或挂钩过程的多线程应用程序,_AfxThreadEntry 中设置 WH_MSGFILTER。

为此挂钩回调函数后调用这些邮件从队列中, 检索之前调度它们,执行特殊处理根据。 由于邮件直接发送到该窗口过程 (通过 SendMessage) 执行不到达通过消息队列,挂钩过程 (_AfxMsgFilterHook) 由不调用 Windows。

从 _AfxMsgFilterHook 挂钩过程时,将调用 ProcessMessageFilter 的 CWinThread (在 MFC 3 x 和最) 和 CWinApp (在 MFC 2 x)。 由于不会发送直接到该窗口过程的消息调用挂钩过程,ProcessMessageFilter 不会获得调用并没有任何特殊代码将执行。

in general,all keyboard and mouse messages,along with WM_PAINT and WM_TIMER messages,are posted to message queue。 ProcessMessageFilter will not be called for WM_SETFOCUS,WM_KILLFOCUS,WM_SETCURSOR,WM_COMMAND,WM_CTLCOLOR,WM_ACTIVATE,etc.,like messages since these are sent directly to window procedure。

若要监视发送到一个菜单、 消息框、 对话框或滚动条的邮件,设置 WH_CALLWNDPROC 挂钩。 每当一条消息直接发送到窗口过程时,就会调用此挂钩。 请注意有将是一个权衡与性能,因为对于通过 SendMessage 消息被发送的每个邮件都调用此挂钩过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值