В моем приложении 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 туда не отправляется. Таким образом, новая проблема заключается в установке фокуса.