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