WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
来源:互联网 发布:加油卡办卡通知 编辑:程序博客网 时间:2024/06/05 00:07
1.添加IWebBrowser2控件
在创建的时候Select project options下要勾选Enable ActiveX Control Hosting, 让其继承自CAxDialogImpl, 然后在对话框上点右键Insert ActiveX Control..., 找到Microsoft Web Browser确定, 将属性ID号改为IDC_IE。
2.让程序运行后打开一个默认网页
1>CComPtr<IWebBrowser2> m_pWb2;
2>在OnInitDialog中, return上面
1>让CMainDlg继承自public IDispEventImpl<IDC_IE, CMainDlg>,
给控件添加一个事件,这个事件是在打开一个新窗口的时候触发
2>关键是响应函数
具体函数的作用可以查下msdn, 按理说这样应该就完了, 但是当我编译的时候有个错误说DISPID_NEWWINDOW2没定义
包含#include <ExDispid.h>就可以了。
问题还没完, 运行后点击网页上的链接窗口并没有响应上面的事件,解决方法:
在创建的时候Select project options下要勾选Enable ActiveX Control Hosting, 让其继承自CAxDialogImpl, 然后在对话框上点右键Insert ActiveX Control..., 找到Microsoft Web Browser确定, 将属性ID号改为IDC_IE。
2.让程序运行后打开一个默认网页
1>CComPtr<IWebBrowser2> m_pWb2;
2>在OnInitDialog中, return上面
CAxWindow wndIE = GetDlgItem(IDC_IE); HRESULT hr; hr = wndIE.QueryControl(&m_pWb2); if (m_pWb2) { CComVariant v; m_pWb2->Navigate(CComBSTR(_T("http://www.baidu.com")), &v, &v, &v, &v); }
以上,就可以在WebBrowser 控件里打开网页了!
-----------------------------------------------------------------------------------------------------------------
遇到的问题是这样的, 在WTL中我用了一个WebBrowser控件来显示网页,但是在点击网页中的链接的时候经常跳到其他浏览器上去打开这个链接。我希望的是总是在我的这个控件上显示网页, 不要跳到其他浏览器上去打开。
1>让CMainDlg继承自public IDispEventImpl<IDC_IE, CMainDlg>,
给控件添加一个事件,这个事件是在打开一个新窗口的时候触发
BEGIN_SINK_MAP(CMainDlg) SINK_ENTRY(IDC_IE, DISPID_NEWWINDOW2, NewWindow2Ie) END_SINK_MAP() BEGIN_SINK_MAP(CMainDlg)SINK_ENTRY(IDC_IE, DISPID_NEWWINDOW2, NewWindow2Ie)END_SINK_MAP()
2>关键是响应函数
void __stdcall NewWindow2Ie(IDispatch **ppDisp, VARIANT_BOOL* Cancel) { HRESULT hr; CComPtr<IDispatch> spdispDoc; hr = m_pWb2->get_Document(&spdispDoc); if (FAILED(hr)) { return; } CComQIPtr<IHTMLDocument2> spDoc = spdispDoc; if (!spDoc) { return; } IHTMLElement *htmlElement; spDoc->get_activeElement(&htmlElement); IHTMLAnchorElement *spAnchorElement; htmlElement->QueryInterface(IID_IHTMLAnchorElement, (void**)&spAnchorElement); if (spAnchorElement) { BSTR bstrElementHref; VARIANT vtUrl, vtNull; hr = spAnchorElement->get_href(&bstrElementHref); // 获取当前点击的链接地址 vtUrl.vt = VT_BSTR; vtUrl.bstrVal = bstrElementHref; m_pWb2->Navigate2(&vtUrl, &vtNull, &vtNull, &vtNull, &vtNull); } *Cancel = TRUE; // FALSE:打开新窗口, TRUE:不打开新窗口 } void __stdcall NewWindow2Ie(IDispatch **ppDisp, VARIANT_BOOL* Cancel){HRESULT hr;CComPtr<IDispatch> spdispDoc;hr = m_pWb2->get_Document(&spdispDoc);if (FAILED(hr)){return;}CComQIPtr<IHTMLDocument2> spDoc = spdispDoc;if (!spDoc){return;}IHTMLElement *htmlElement;spDoc->get_activeElement(&htmlElement);IHTMLAnchorElement *spAnchorElement;htmlElement->QueryInterface(IID_IHTMLAnchorElement, (void**)&spAnchorElement);if (spAnchorElement){BSTR bstrElementHref;VARIANT vtUrl, vtNull;hr = spAnchorElement->get_href(&bstrElementHref); // 获取当前点击的链接地址vtUrl.vt = VT_BSTR;vtUrl.bstrVal = bstrElementHref;m_pWb2->Navigate2(&vtUrl, &vtNull, &vtNull, &vtNull, &vtNull);}*Cancel = TRUE; // FALSE:打开新窗口, TRUE:不打开新窗口}
具体函数的作用可以查下msdn, 按理说这样应该就完了, 但是当我编译的时候有个错误说DISPID_NEWWINDOW2没定义
包含#include <ExDispid.h>就可以了。
问题还没完, 运行后点击网页上的链接窗口并没有响应上面的事件,解决方法:
BEGIN_MSG_MAP(CMainDlg) #if _ATL_VER >= 0x0700 // 请注意这里 CHAIN_MSG_MAP(CAxDialogImpl<CMainDlg>) #endif MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) COMMAND_ID_HANDLER(IDOK, OnOK) COMMAND_ID_HANDLER(IDCANCEL, OnCancel) END_MSG_MAP()
0 0
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页 .
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
- Delphi通过IE窗口句柄获取网页接口(IWebBrowser2)
- 在WebBrowser控件打开的网页链接后直接打开而不新弹出IE窗口来打开
- 如何在WebBrowser打开的网页链接后直接在WebBrowser打开而不是新弹出一个IE窗口来打开
- 通过窗口句柄获得 IWebBrowser2 接口源码
- 通过IWebBrowser2的Navigate2来打开网页,怎样判断网页是否全部加载完毕
- 通过IWebBrowser2的Navigate2来打开网页,怎样判断网页是否全部加载完毕
- Delphi WebBrowser始终在当前窗口打开新网页
- VC:WebBrowser控件始终在本窗口打开新页面
- C# WebBrowser强制使新窗口网页只在WebBrowser打开
- C# WebBrowser强制使新窗口网页只在WebBrowser打开
- C# WebBrowser强制使新窗口网页只在WebBrowser打开
- C# WebBrowser强制使新窗口网页只在WebBrowser打开
- C# winform使用webbrowser控件,不弹出新的页面,只在当前窗口打开
- Delphi通过窗口句柄获得IWebBrowser2接口源码
- Git搭建
- mysql乐观锁总结和实践
- HBase table Get Data 获取数据
- Java获取本机公网ip
- LeetCode 347. Top K Frequent Elements
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
- JSON 入门指南
- 通过路径获取视频 缩略图
- vim编辑器的使用
- linux下创建多线程执行
- iphone——日期处理
- C# Console类
- 关于img ,你必须注意的
- 57. Insert Interval