Встроенный MSHTML: колесо мыши игнорируется - PullRequest
1 голос
/ 17 ноября 2008

В моем приложении VC ++ есть встроенный браузер (MSHTML). Он работает нормально и правильно обрабатывает мышь (например, щелчки и выделения обрабатываются в порядке). Тем не менее, вращение колесика мыши над встроенным браузером не имеет никакого эффекта. Это моя проблема.

Я не очень хорошо знаком с внутренностями встраивания MSHTML и OLE в целом. Это приложение wxWidgets (wxWidgets - библиотека C ++ GUI), и я использую его компонент IEHTMLWin (который содержит элемент управления MSHTML и помещает его в интерфейс wxWindow). Тем не менее, у меня есть источник, и я хочу сделать некоторую отладку.

Если вы забываете wxWidgets и говорите исключительно об OLE и MSHTML, то где лучше всего искать причину проблемы? Я пытался наивно гуглить варианты «событий мыши mshtml» или «колесо mshtml», но не дал хороших указателей.

Если вы хотите взглянуть на код IEHTMLWin, его можно просмотреть здесь . Файл iehtmlwin.c (1,5 тыс. Строк) содержит весь код, связанный с OLE, и реализует все интерфейсы, необходимые для размещения элемента управления веб-браузера. Стоит отметить, что события мыши вообще не переходят к содержащему wxWindow (OnMouse никогда не вызывается).

{UPD} mshtml версия: 6.00.2900.3314. Другие приложения, в которых размещается этот элемент управления (включая IE), поддерживают колесо. {/ UPD}


jdigital подсказка (относительно winspector) была очень полезна. После некоторого перехвата сообщений я понимаю, что проблема связана с фокусом. Щелчок на элементе управления браузером как-то не фокусирует внимание на элементе управления браузера (в отличие, скажем, от RichEdit), и WM_MOUSEWHEEL туда не отправляется. Таким образом, новая проблема заключается в установке фокуса.

1 Ответ

0 голосов
/ 18 ноября 2008

Попробуйте Winspector (http://www.windows -spy.com / ), который позволит вам видеть сообщения Windows. Убедитесь, что события колеса прокрутки проходят.

...