在 MFC 中,非活动窗口是不是接收 PreTranslateMessage 事件?
Posted
技术标签:
【中文标题】在 MFC 中,非活动窗口是不是接收 PreTranslateMessage 事件?【英文标题】:In MFC, do inactive windows receive PreTranslateMessage events?在 MFC 中,非活动窗口是否接收 PreTranslateMessage 事件? 【发布时间】:2015-04-29 20:08:30 【问题描述】:我注意到一种行为,并想确认没有简单的方法可以解决它。假设我有一个主 CFrameWnd,它包含几个 CView,通常嵌套几个层次。假设他们每个人都覆盖PreTranslateMessage(MSG* pMsg)
(不要开枪,我继承了这个代码:P)。问题是:所有的 CViews / CFrameWnd / 等都会收到通知到他们的PreTranslateMessage(MSG* pMsg)
,还是由第一个处理它的PreTranslateMessage(MSG* pMsg)
消费的消息?
根据我的观察,似乎只有一个PreTranslateMessage(MSG* pMsg)
被触发,但我想确认一下。
【问题讨论】:
【参考方案1】:如果发布到 Windows 消息队列的消息用于该视图或该视图的子窗口,则非活动视图将收到 PreTranslateMessage 调用。
如果消息不满足上述条件,则非活动视图不会处理 PreTranslateMessages。
有 PreTranslateMessage 和菜单、工具栏、功能区等的 OnCmdMsg 路由。在这种情况下,非活动视图默认不会处理它们,除非应用程序框架窗口已覆盖 OnCmdMsg 并决定遍历所有子级意见。
【讨论】:
以上是关于在 MFC 中,非活动窗口是不是接收 PreTranslateMessage 事件?的主要内容,如果未能解决你的问题,请参考以下文章