WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口

本文介绍如何为使用 WebBrowser 控件的应用启用多标签浏览功能,并提供了处理新标签请求的具体代码示例。

原创  [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口 收藏

从IE7 开始, IE 支持多页面(Tab)浏览。 而IE 的WebBrowser 控件也相应的多页面浏览开发接口。 出于向下兼容考虑,该接口在缺省情况下是被屏蔽的。 假设你用WebBrowser 控件开发一个浏览器 MyTabBrowser, 你会发现右键菜单的"在新标签页中打开" (Open in New Tab)项是灰色的(如下图)。

IE内核 开发 多页面浏览器

打开这个功能,你需要在注册表里面创建以自己文件名为值的DWORD值:

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
     SOFTWARE
          Microsoft
               Internet Explorer
                    Main
                         FeatureControl
                              FEATURE_TABBED_BROWSING
                                   MyTabBrowser.exe= 0x00000001

多页面浏览开发接口开启之后,你的程序MyTabBrowser 就可以和IE一样响应"Open in New Tab”的请求了。 IE 定义了以下3种动作为"Open in New Tab"的请求

1)用户在右键菜单中点击“Open in New Tab” 项

2)  用户用鼠标中键点击链接

3)用户按住Ctrl 键点击链接

该请求会激发 DWebBrowserEvents2::NewWindow3 事件, 该事件的参数dwFlags 标示了这个请求的类型:

  • NWMF_FORCEWINDOW: 在新窗口中打开链接.
  • NWMF_FORCETAB: 在新Tab 中打开链接.
  • 以下是简单的代码示例如何处理该事件:

     

    1. void __stdcall OnEventNewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl)  
    2. {  
    3.     if (dwFlags & NWMF_FORCETAB) // Open in a new Tab  
    4.     {  
    5.         CComPtr<IWebBrowser2> spBrowser = OpenNewTab(); // Create a new tab and return the IWebBrowser2 pointer  
    6.         if (spBrowser)  
    7.         {  
    8.             HRESULT hr = spBrowser->QueryInterface(IID_IDispatch, (void**)ppDisp);  
    9.             *Cancel = SUCCEEDED(hr) ? VARIANT_FALSE : VARIANT_TRUE;  
    10.         }  
    11.     }  
    12.     else if (dwFlags & NWMF_FORCEWINDOW) // Open in a new Window  
    13.     {  
    14.        .....  
    15.     }  
    16.  }  

     

    >> 原创文章的版权属于作者,转载请注明出处和作者信息(http://blog.youkuaiyun.com/WinGeek/), 谢谢。 <<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值