基于Duilib的多标签浏览器(IE内核)

Duilib开源库封装了一个简单的WebBrowser控件,提供了各种事件回调接口。可以方便简单的嵌入到客户端程序做网页展示用,如果想做一个类似IE的多标签的浏览器,就需要封装一下事件接口,并提供一个标签管理器来进行网页管理。

首先参照例子建立一个简单的Duilib项目,并创建一个主窗口CMainWnd,CMainWnd继承于WindowImplBase(窗口基类)和CWebBrowserEventHandler(WebBrowser事件接口)。创建以后,实现以下方法,用于处理WebBrowser事件:

virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(CWebBrowserUI* pWeb, DWORD dwID, POINT __RPC_FAR *ppt, IUnknown __RPC_FAR *pcmdtReserved, IDispatch __RPC_FAR *pdispReserved);
    virtual HRESULT STDMETHODCALLTYPE GetHostInfo(CWebBrowserUI* pWeb, DOCHOSTUIINFO __RPC_FAR *pInfo);
    virtual void BeforeNavigate2(CWebBrowserUI* pWeb, IDispatch *pDisp,VARIANT *&url,VARIANT *&Flags,VARIANT *&TargetFrameName,VARIANT *&PostData,VARIANT *&Headers,VARIANT_BOOL *&Cancel);
    virtual void NavigateError(CWebBrowserUI* pWeb, IDispatch *pDisp,VARIANT * &url,VARIANT *&TargetFrameName,VARIANT *&StatusCode,VARIANT_BOOL *&Cancel);
    virtual void NavigateComplete2(CWebBrowserUI* pWeb, IDispatch *pDisp,VARIANT *&url);
    virtual void ProgressChange(CWebBrowserUI* pWeb, LONG nProgress, LONG nProgressMax);
    virtual void NewWindow3(CWebBrowserUI* pWeb, IDispatch **pDisp, VARIANT_BOOL *&Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl);
    virtual void CommandStateChange(CWebBrowserUI* pWeb, long Command,VARIANT_BOOL Enable);
    virtual void TitleChange(CWebBrowserUI* pWeb, BSTR bstrTitle);
    virtual void DocumentComplete(CWebBrowserUI* pWeb, IDispatch *pDisp,VARIANT *&url);

然后我们定一个结构体TabInfo来存储标签和WebBrowser的信息:

typedef struct _tagTabInfo
{
    UINT64 nID;
    TCHAR szUrl[2048];
    TCHAR szTitle[256];
    TCHAR szFavUrl[2048];
    TCHAR szFavName[256];
    CBrowserTab* pTab;
    CWebBrowserUI* pWebBrowser;
}TabInfo;

有了上面的信息,我们把所有标签使用std::vector<TabInfo*>来管理,新建、关闭、切换标签都可以通过操作上面的数组来完成。

核心流程如下:
1、NewWindow3 WebBrowser发起新开网页的要求,这个地方创建TabInfo,并添加到标签管理器;
2、TitleChange 网页标题改变,此时更新标签文字;
3、DocumentComplete 网页加载完毕,此时可以通过注入JS来操作网页元素;

效果截图:
基于Duilib的多标签浏览器(TroyBrowser)

完整代码请联系Troy(QQ:656067418)

duilib开源项目交流圈(QQ群:261851826、261675375)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值