请问使用WebBrowser中OnBeforeNavigateExplorer1为什么不响应?

hahahawk 2003-04-07 06:24:55
在vc7.0环境下,单文档。在MyView.cpp中运行时生成WebBrowser对象。

在MyView.h中增加
afx_msg void OnBeforeNavigateExplorer1(LPCTSTR URL,long Flags,LPCTSTR TargetFrameName,VARIANT FAR* PostData,LPCTSTR Headers,BOOL FAR* Cancel);
afx_msg void OnTitleChangeExplorer2(LPCTSTR Text);
DECLARE_EVENTSINK_MAP()

在MyView.cpp中增加:
CWebBrowser2 m_web;

BEGIN_EVENTSINK_MAP(CEx09bView,CView)
ON_EVENT(CEx09bView,ID_MYWEB,100,OnBeforeNavigateExplorer1,VTS_BSTR VTS_I4 VTS_BSTR VTS_PVARIANT VTS_BSTR VTS_PBOOL)
ON_EVENT(CEx09bView,ID_MYWEB,113,OnTitleChangeExplorer2,VTS_BSTR)
END_EVENTSINK_MAP()

void CEx09bView::OnBeforeNavigateExplorer1(LPCTSTR URL,long Flags,
LPCTSTR TargetFrameName,VARIANT FAR* PostData,LPCTSTR Headers,BOOL FAR* Cancel){
AfxMessageBox("goto 2.htm");
m_target.Navigate("http://www.aaa.net/2.htm",NULL,NULL,PostData,NULL);
}
void CEx09bView::OnTitleChangeExplorer2(LPCTSTR Text){
....
}

int CEx09bView::OnCreate(LPCREATESTRUCT lpCreateStruct){
......
DWORD dwStyle = WS_VISIBLE |WS_CHILD;
if(m_search.Create(NULL,dwStyle,CRect(0,0,100,100),this,ID_BROWSER_SEARCH)==0) {
...
return -1;
}
m_search.GoHome();
...
}
为什么当点击webbrowser中网页的超级联结时候,OnTitleChangeExplorer2响应了,OnBeforeNavigateExplorer1却从来不响应?
...全文
286 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dragontt 2003-04-08
  • 打赏
  • 举报
回复
void CWebBrowser2::Navigate(LPCTSTR URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)
{
static BYTE parms[] =
VTS_BSTR VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT;
InvokeHelper(0x68, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
URL, Flags, TargetFrameName, PostData, Headers);
}

void CWebBrowser2::Navigate2(VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)
{
try{
static BYTE parms[] =
VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT;
InvokeHelper(0x1f4, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
URL, Flags, TargetFrameName, PostData, Headers);

}catch(...)
{
}
}

----------------
我也是刚刚开始研究这个
希望上面两段代码对你有帮助
hahahawk 2003-04-07
  • 打赏
  • 举报
回复
VC中用 ON_EVENT(CEx09bView, ID_BROWSER_SEARCH,250,OnBeforeNavigate2Explorer1, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
可以解决啦。
可能是因为WebBrowser的版本或者IE的版本不同引起的,113换成了250啦。
但是还有一个问题:这个函数中的URL是VARIANT*类型,而
CWebBroser2 m_web;
m_web.Navigate(LPCTSTR* url,.....)中url是LPCTSTR*类型,这两种类型如何转换才对?
我用
LPCTSTR* p = (LPCTSTR*)( (*URL).pBstrVal);
总是只能取出url中第一个字符h。
如果用指针往后移动,虽然可以取出所有字符,但是又因为无法确定字符串长度也没有意义。
请高手指教!
dragontt 2003-04-07
  • 打赏
  • 举报
回复
你用这个试试
Private Sub object_BeforeNavigate2( _
ByVal pDisp As Object, _
ByRef url As Variant, _
ByRef Flags As Variant, _
ByRef TargetFrameName As Variant, _
ByRef PostData As Variant, _
ByRef Headers As Variant, _
ByRef Cancel As Boolean)

参考
ms-help://MS.VSCC/MS.MSDNVS.2052/ProgIE/workshop/browser/webbrowser/reference/Events/BeforeNavigate2.htm

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧