繁体   English   中英

在WebBrowser .NET CF 3.5中禁用上下文菜单

[英]Disable Context Menu in WebBrowser .NET CF 3.5

我在Windows CE设备应用程序的.NET CF 3.5中使用WebBrowser控件,出于安全原因,需要禁用上下文菜单。 我已经尝试了多种方法,但似乎都不适用于.NET CF 3.5的移动设备:

  1. 我尝试过在WebBrowser上放置一个pictureBox,并将其设置为透明。 不幸的是,透明性不起作用,最终变成了浏览器上的白框。

  2. 我尝试实现一个新的自定义透明控件来放置在Web浏览器上,类似于this

  3. 我试过编辑html中的OnContextMenu元素,但是不走运。

  4. 我尝试覆盖CreateParams以在浏览器上制作一个透明的PictureBox,这被称为此处的解决方案之一。

网上似乎有许多解决方案,但似乎没有一个适用于带有.NET CF 3.5的Windows CE。 我相信这是因为WebBrowser的实现比完整的.NET 3.5简单得多。 因此,我的问题是:有没有办法禁用WebBrowser控件的上下文菜单?

我没有为特定的控件尝试过它,所以我不知道它是否可以工作,但是您是否尝试过子化浏览器控件的类并拦截和丢弃导致上下文菜单首先出现的消息? 如果必须解决相同的问题,那当然就是我会首先尝试的方法。

如果您觉得自己不足以管理托管WebBrowser,那么通过P /从C#调用本机HTML控件API(不是IWebBrowser2等)实际上并不难。

如果走那条路,那么您可以

  • 截取上下文菜单通知NM_CONTEXTMENU,该通知将在上下文菜单即将显示时发送到HTML控件主机/父级,而不让其继续使用默认的窗口消息处理程序

要么

  • 通过向其发送带有FALSE的DTM_ENABLECONTEXTMENU来完全禁用上下文菜单。

到那里去了,都完成了。

编辑:

在这种情况下,可能存在3种复杂程度:

  1. 除非使用窗口样式HS_CONTEXTMENU创建HTML控件,否则默认情况下将禁用上下文菜单。 因此,如果您只想禁用它,则本机CreateWindowEx是P / Invoke唯一需要的本机Win32 API函数。
  2. 在另一方面,如果想在运行时启用和禁用上下文菜单,你可以P / Invoke的SendMessage与DTM_ENABLECONTEXTMENU和TRUE / FALSE。
  3. 最后,如果要最大程度地控制菜单或在HTML控件要显示菜单时执行完全任意的操作,则需要P / Invoke SetWindowLong来继承父类并听NM_CONTEXTMENU并决定是否继续显示菜单。菜单,还是不做,或者完全做其他事情。

这些可能的答案均无效。 因此,我放弃了尝试隐藏上下文菜单的方法,只是为Navigating事件添加了一个事件处理程序,并取消了导航(如果它与我最初发送给该URL的URL不同)。 它仍然显示上下文菜单,但是单击任何内容都不会将其发送到另一个页面

void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) {
    //don't let users go anywhere else
    if (e.Url != webBrowser1.Url) {
        e.Cancel = true;
    }
}

.NET CF中的WebBrowser控件实现不包含属性IsWebBrowserContextMenuEnabled吗?

我在寻找其他内容时碰到了这个非常有趣的博客条目 我肯定看起来像它解决了上下文菜单问题(注意:我完全没有测试过)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM