禁用 AxWeb 浏览器上下文菜单 VB.NET



我正在使用 Axwebbrowser 在我的 VB.NET 应用程序中显示 HTML 页面,我想知道如何禁用它的上下文菜单?

我更多地使用AxWebbrowser而不是原始Webbrowser组件,因为它处理NewWindows 2事件,例如,当在新选项卡中打开链接时,该事件可帮助我获取弹出URL。

所以我不能使用 Webbrowser1.ContextMenuEnabled = False

感谢您的回答

一个简单的方法是在应用程序级别捕获WM_RBUTTONDOWN和WM_RBUTTONDBLCLK消息。 您可以使用语句 Application.AddMessageFilter(instance of IMessageFilter) 向应用程序添加消息过滤器。 在下面的示例中,ImessageFilter interferace 由包含 AXWebrowser 控件的窗体实现。 由于筛选器是应用程序范围的,因此在表单激活/停用时添加/删除它。

Public Class Form1
    Implements IMessageFilter
    Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
        Const WM_RBUTTONDOWN  As Int32 = &H204
        Const WM_RBUTTONDBLCLK As Int32 = &H206
        ' check that the message is WM_RBUTTONDOWN Or WM_RBUTTONDBLCLK
        ' verify AxWebBrowser1 is not null
        ' verify the target is AxWebBrowser1
        Return (m.Msg = WM_RBUTTONDOWN OrElse m.Msg = WM_RBUTTONDBLCLK) AndAlso (AxWebBrowser1 IsNot Nothing) AndAlso (AxWebBrowser1 Is Control.FromChildHandle(m.HWnd))
    End Function
    Protected Overrides Sub OnActivated(e As EventArgs)
        MyBase.OnActivated(e)
        ' Filter is application wide, activate filter with form
        Application.AddMessageFilter(Me)
    End Sub
    Protected Overrides Sub OnDeactivate(e As EventArgs)
        MyBase.OnDeactivate(e)
        ' Filter is application wide, remove when form not active
        Application.RemoveMessageFilter(Me)
    End Sub
End Class

相关内容

  • 没有找到相关文章

最新更新