我正在用 C# 开发一个带有嵌入式WebBrowser控件的 Windows 窗体应用程序,以“防伪”(即禁用上下文菜单、后退按钮、自由导航等)访问第三方 Web 应用程序。
现在我正在尝试将缩放功能添加到我的自定义浏览器。我有键盘组合为它工作(CTRL + 和 CTRL - 对底层 ActiveX WebBrowser 对象进行正确的 OLE 调用),但在WebBrowser我不得不处理的其他令人沮丧的事情中,我似乎无法弄清楚如何像 IE 一样捕捉 CTRL-鼠标滚轮来模拟缩放功能。我到处寻找解决方案,但无济于事。
为了弄清楚,我创建了一个空表单,其中只有 WebBrowser 控件,并发现以下内容:
MouseWheel当父窗体具有焦点并且鼠标光标悬停在窗口顶部(例如应用程序的标题上)时,或者当鼠标光标悬停在WebBrowser控件上时,当控件未出现时,CTRL-MouseWheel 始终会触发该事件即使父窗体有焦点,也要有焦点。MouseWheel当鼠标光标悬停在WebBrowser控件上并WebBrowser具有焦点时,CTRL-MouseWheel 永远不会触发该事件,并且似乎没有效果。WebBrowser但MouseWheel在垂直滚动条完全到达顶部或底部之前不会触发事件。
Message对于从父窗体继承的示例类和从父窗体继承的示例类和WM_MOUSEWHEEL通过覆盖拦截for仅适用于上述条件(正确表示)。WndProcDefWndProcWebBrowserwParamMK_CONTROLPreviewKeyDown正如预期的那样,按下 CTRL 时会触发该事件,但仍不与鼠标滚轮一起执行任何操作。所以我猜它Message是在父窗体和托管控件级别下处理的,并且不会冒泡到我可以拦截甚至处理它的地方。有没有办法做到这一点,或者使用 CTRL-MouseWheel 模拟放大和缩小的其他方法?
谢谢阅读!