MFC有PreTranslageMessage() 可以处理一些基于MFC的消息处理。
可是有时候如果你开发一个基于MFC的ActiveX作为容器,内部实现是Win32 或者其他框架会发现,好多消息都不能正常收到。
除非把你现有的内部的控件基于各种MFC的基类实现(会重载各种MFC的PreTranslateMessage)才能收到各种消息。
根本原因是基于MFC的ActiveX控件没有自己的消息循环,要基于使用ActiveX的容器来处理消息。这样有时候会忽略掉一些我们需要的消息。
微软官方有出过KB来解决问题,这里贴出了备忘一下。
PRB: MFC ActiveX Control in IE Doesn't Detect Keystrokes
https://support.microsoft.com/en-us/kb/168777
The TAB key, arrow keys, and accelerator keys do not work as expected when an ActiveX control is the parent window of a modeless dialog box or of a propertysheet window
https://support.microsoft.com/en-us/kb/187988
SYMPTOMS
However, PreTranslateMessage is not always called for an MFC ActiveX control.
CAUSE
Internet Explorer does not automatically UI-Activate any controls when a page is first loaded. Internet Explorer waits until the user tabs t