WPF下如何去除WebBrowser的滚动条和捕获关闭事件

方法一:适用于VS2008

1、在解决方案中添加“引用”
     选择 COM 下的 Microsoft html object library

2、引入命名空间
     using mshtml;

3、添加 WebBrowser 事件
     在 WebBrowser 的 LoadCompleted 事件里
     mshtml.HTMLDocumentClass dom = (mshtml.HTMLDocumentClass)webBrowserCygj.Document; //定义HTML
     dom.documentElement.style.overflow = "hidden";    //隐藏浏览器的滚动条 
     dom.body.setAttribute("scroll", "no");            //禁用浏览器的滚动条

方法二:适用于VS2010

1、在解决方案中添加“引用”
     选择 COM 下的 Microsoft html object library

2、引入命名空间
     using mshtml;

3、添加 WebBrowser 事件
     在 WebBrowser 的 LoadCompleted 事件里
     mshtml.HTMLDocument dom = (mshtml.HTMLDocument)webBrowserCygj.Document; //定义HTML
     dom.documentElement.style.overflow = "hidden";    //隐藏浏览器的滚动条 
     dom.body.setAttribute("scroll", "no");            //禁用浏览器的滚动条

注1:出于MS的某些原因,在VS2010下,HTMLDocumentClass 需更改为HTMLDocument 方可生效。

注2:通过页面代码控制浏览器窗口滚动条
        overflow-y:hidden '表示没有垂直滚动条
        overflow-x:hidden '表示没有水平滚动条
        scroll:no或overflow-x:hidden;overflow-y:hidden或overflow:hidden '让浏览器窗口永远不出现滚动条

        例:<BODY scroll="no">

注3:“隐藏浏览器的滚动条”和“禁用浏览器的滚动条”同时使用,方可实现对所有页面有效。

有点难描述说的是什么。大概就是下面这个图:窗体中嵌套一个Webbrowser,现在网页请求关闭

响应MessageHook事件:

this.webBrowser.MessageHook += webBrowser_MessageHook;
IntPtr webBrowser_MessageHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            if(msg == 130)
            {
                //do something
            }
            return hwnd;
        }

这个事件不是EventHander的委托,而是HwndSourceHook的委托。

伟大的VS并没有对其做优化处理,所以在Xaml中响应事件会出错。只能在后台自己写了。

原文地址:https://www.cnblogs.com/tianciliangen/p/4727396.html