Navigate2 compare with Navigate

本文探讨了CWebBrowser2控件中的两种网页导航方法:Navigate和Navigate2。通过具体实例对比了这两种方法的实现细节,并讨论了它们在调用底层API时的不同之处,特别是针对错误页面的问题提出了解决方案。
CWebBrowser2 ctrl provide two method to link a web page:
Navigate2(VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)
Navigate(LPCTSTR URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)

My requirement is very simple, give a link: such as www.sina.com, navigate to web page.
At first, I use method Navigate because it is easy to use.
But sometimes I find that it get a error page while I can link the web page with other browser.

After a long time research, I can not find a good solution, then I found the method Navigate2. I wrote a method to rope it as follow:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> 1 void Navigate2(CString szHtmlUrl)
 2 {
 3     try
 4     {
 5         VARIANT vFlags = {VT_I4, navNoReadFromCache};
 6         VARIANT vUrl; 
 7         VariantInit(&vUrl);
 8         BSTR bstrUrl = szHtmlUrl.AllocSysString();
 9         vUrl.vt = VT_BSTR;
10         vUrl.bstrVal = bstrUrl;
11         m_web.Navigate2(&vUrl, &vFlags, NULL, NULL, NULL);// refresh top browser's content
12         g_Logger.Add(LOGLEVEL_FYI, _T("Navigate2TopBanner, Top link Url: %s"), szHtmlUrl);
13         ::SysFreeString(bstrUrl);
14     }
15     catch(dot.gif){}
16 }
It works well....

Compare the implements:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1 void CWebBrowser2::Navigate(LPCTSTR URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)
2 {
3     static BYTE parms[] =
4         VTS_BSTR VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT;
5     InvokeHelper(0x68, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
6          URL, Flags, TargetFrameName, PostData, Headers);
7 }

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1 void CWebBrowser2::Navigate2(VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)
2 {
3     static BYTE parms[] =
4         VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT;
5     InvokeHelper(0x1f4, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
6          URL, Flags, TargetFrameName, PostData, Headers);
7 }

I find that they invoked different  dwDispID  of  InvokeHelper, get the explain from MSDN:
Parameters
dwDispID
Identifies the method or property to be invoked.

Who can tell me what's the differents of 0x1f4 between 0x68?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值