在我的VC ++应用程序中,我有一个嵌入式浏览器(MSHTML)。它工作正常并正确处理鼠标(例如,点击和选择处理正常)。但是,嵌入式浏览器上的鼠标滚轮旋转没有任何效果。这是我的问题。
我对MSHTML嵌入的内部结构和一般的OLE不是很熟悉。这是一个wxWidgets应用程序(wxWidgets是一个C ++ GUI库),我正在使用它的IEHTMLWin组件(它托管一个MSHTML控件并将其包装在wxWindow接口中)。但是,我确实有源,我愿意做一些调试。
忘记wxWidgets并纯粹谈论OLE和MSHTML,开始寻找问题的原因是什么?我尝试使用天真谷歌搜索“mshtml鼠标事件”或“mshtml轮子”的变种,但没有给出任何好的指示。
如果您想查看IEHTMLWin的代码,可以浏览here。 iehtmlwin.c文件(1,5 k行)具有所有与OLE相关的代码,并实现托管Web浏览器控件所需的所有接口。值得注意的是,鼠标事件根本不会进入包含wxWindow(永远不会调用OnMouse)。
{UPD} mshtml版本:6.00.2900.3314。承载此控件的其他应用程序(包括IE)支持滚轮。 {/ UPD}
jdigital提示(关于winspector)非常有帮助。在一些消息嗅探后,我意识到问题与焦点有关。单击浏览器控件不会将焦点设置在浏览器控件上(与RichEdit不同),并且不会在那里发送WM_MOUSEWHEEL。所以新问题就是关注焦点。