1

在我的 VC++ 应用程序中,我有一个嵌入式浏览器 (MSHTML)。它工作正常并正确处理鼠标(例如,单击和选择处理正常)。但是,嵌入式浏览器上的鼠标滚轮旋转没有任何效果。这是我的问题。

我对 MSHTML 嵌入的内部结构和一般的 OLE 不是很熟悉。这是一个 wxWidgets 应用程序(wxWidgets 是一个 C++ GUI 库),我正在使用它的 IEHTMLWin 组件(它承载一个 MSHTML 控件并将其包装在 wxWindow 界面中)。但是,我确实有源代码,并且愿意进行一些调试。

忘记 wxWidgets 并纯粹谈论 OLE 和 MSHTML,什么是开始寻找问题原因的正确位置?我尝试天真地搜索“mshtml 鼠标事件”或“mshtml 滚轮”的变体,但没有给出任何好的指示。

如果你想看一下 IEHTMLWin 的代码,可以在这里浏览。iehtmlwin.c 文件(1,5 k 行)包含所有与 OLE 相关的代码,并实现了托管 Web 浏览器控件所需的所有接口。值得注意的是,鼠标事件根本不会进入包含的 wxWindow(永远不会调用 OnMouse)。

{UPD} mshtml 版本:6.00.2900.3314。承载此控件的其他应用程序(包括 IE)支持滚轮。{/UPD}


jdigital 提示(关于 winspector)非常有帮助。经过一些消息嗅探,我意识到问题与焦点有关。单击浏览器控件以某种方式不会将焦点设置在浏览器控件上(与 RichEdit 不同),并且不会将 WM_MOUSEWHEEL 发送到那里。所以新的问题是设置焦点。

4

1 回答 1

0

试试 Winspector ( http://www.windows-spy.com/ ),它可以让你看到 windows 消息。确保滚轮事件正在通过。

于 2008-11-17T21:14:01.590 回答