Я разрабатываю приложение Windows Forms на C # со встроенным элементом управления WebBrowser
для «фиктивного» (т. Е. Отключения контекстных меню, кнопки возврата, свободной навигации и т. Д.) Доступа к стороннему веб-приложению.
Прямо сейчас я пытаюсь добавить функцию масштабирования в свой собственный браузер. У меня работают комбинации клавиш (CTRL + и CTRL - сделайте правильные вызовы OLE для базового объекта ActiveX WebBrowser), но среди других неприятных вещей о WebBrowser
, с которыми мне пришлось иметь дело, я не могу понять узнаем, как захватить CTRL-колесо мыши для имитации функции масштабирования, как это делает IE. Я везде искал решение этой проблемы, но безрезультатно.
Чтобы попытаться понять это, я создал пустую форму с элементом управления WebBrowser и обнаружил следующее:
- CTRL-MouseWheel всегда запускает событие
MouseWheel
, когда родительская форма имеет фокус и курсор мыши находится над верхней частью окна (например, над заголовком приложения), или когда курсор мыши находится над элементом управленияWebBrowser
, когда это происходит. не имеет фокуса, хотя родительская форма имеет фокус. - CTRL-MouseWheel никогда не запускает событие
MouseWheel
, когда курсор мыши находится над элементом управленияWebBrowser
иWebBrowser
находится в фокусе, и, похоже, нет никакого эффекта. - Using the mouse wheel without CTRL scrolls the window contents of
WebBrowser
but does not fire theMouseWheel
event until the vertical scroll bar has fully reached either the top or the bottom. - Intercepting the
Message
forWM_MOUSEWHEEL
by overridingWndProc
andDefWndProc
both for a sample class inherited fromWebBrowser
and for the parent form applies only for the above conditions (withwParam
properly denotingMK_CONTROL
). - Событие
PreviewKeyDown
срабатывает при нажатии CTRL, как и ожидалось, но по-прежнему ничего не делает в унисон с колесом мыши.
Итак, я предполагаю, что Message
обрабатывается ниже родительской формы и уровня управляемого контроля и не всплывает туда, где я могу его перехватить или даже обработать. Есть ли способ сделать это или какой-либо другой способ имитировать увеличение и уменьшение масштаба с помощью CTRL-MouseWheel?
Спасибо за чтение!