CHtmlView点击一个链接最先响应的是什么事件?在OnBeforeNavigate2之前有啥事件?

wmouse 2002-05-17 09:22:26
如题
...全文
155 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixuyu 2002-05-29
  • 打赏
  • 举报
回复
关注,up
wmouse 2002-05-22
  • 打赏
  • 举报
回复
又这个意思,我的焦点在于如何知道由程序产生的浏览怎样知道谁是第几个(比如一个页面显示多个.asp——include了好几个),因为我想处理第一个。
mountlin 2002-05-22
  • 打赏
  • 举报
回复
关注。我想你的意思是不是指有什么办法可以区分是用户点击产生的浏览事件或是网页或程序自动产生的,我也遇到了这个问题。
wmouse 2002-05-20
  • 打赏
  • 举报
回复
我没有用WebBrowser而是直接继承CHtmlView,到里是一样吗?我曾经在OnDocumentComplete(LPCTSTR lpszURL)做过处理,但是感觉OnDocumentComplete比较靠后,我的意思是如果要按照《Handling HTML Element Events》所说的去做,应当将文中的“void CMyClass::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)”所做的事情放到哪里去做呢?
蒋晟 2002-05-20
  • 打赏
  • 举报
回复
你没考虑到有框架集的情况
>主页include了多个.asp文件
怎么include的?
wmouse 2002-05-20
  • 打赏
  • 举报
回复
其中:
CString csTmp = lpszURL;
int nPos = csTmp.Find("http");
if(nPos != -1)
csTmp.Delete(0,nPos);
if(m_csURL != csTmp)
m_bOpen = FALSE;
根现在的讨论无关,是因为有很多次lpszURL是“取消浏览”的默认页面——“res://D:\WINNT\system32\shdoclc.dll/navcancl.htm#http://......”,所以我想把它屏蔽掉,这个暂且不提。
目前的问题是找我的方法做的话,第二个.asp会将第一个覆盖掉,第一个就看不见了。所以我想只处理第一个.asp,以后的就不看了,因此想在OnBeforeNavigate2前找一个计数的地方。
wmouse 2002-05-20
  • 打赏
  • 举报
回复
是这样的:要求不论打开哪一个网页都要传一个头——header上去。点击浏览器的按钮连结道主页,首先调用了Navigate2,给这个函数的lpszHeaders赋了值传进去,等运行到OnBeforeNavigate2是发现这时的lpszHeaders就是我刚才传进去的,一切正常。但是由于主页include了多个.asp文件,所以接下来又转到了OnBeforeNavigate2,此时lpszURL是被include的.asp文件的URL,lpszHeaders为空;于是我在OnBeforeNavigate2里给lpszHeaders填上值,并且调用Navigate2,然后将*pbCancel=1,让接下来的CHtmlView::OnBeforeNavigate2(lpszURL, nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);讲原来lpszHeaders为空的那次连结杀掉,等下次lpszHeaders不为空时再进来再放过它。
也许我说得太混乱,代码如下:
void CSlExplorerView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel)
{
// TODO: Add your specialized code here and/or call the base class

if(strcmp(lpszURL,"http://91.0.1.21/server/tt.asp")==0)
*pbCancel = 0;
else if(!lpszHeaders||!strstr(lpszHeaders, "a000018x3WaOcAsbVk"))
{
CString csTmp = lpszURL;
int nPos = csTmp.Find("http");
if(nPos != -1)
csTmp.Delete(0,nPos);
if(m_csURL != csTmp)
m_bOpen = FALSE;

if(!m_bOpen)
{
m_csURL = csTmp;
m_csHeaders = "a000018x3WaOcAsbVk";
Navigate2(m_csURL,0,NULL,m_csHeaders);
m_bOpen = TRUE;
*pbCancel = 1;
}
else
*pbCancel = 1;
}
else
*pbCancel = 0;

CHtmlView::OnBeforeNavigate2(lpszURL, nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
}
蒋晟 2002-05-20
  • 打赏
  • 举报
回复
WebBrowser和CHtmlView是一样的……CHtmlView只不过在CFormView上放了一个WebBrowser而已。
你要处理什么事件?
wmouse 2002-05-17
  • 打赏
  • 举报
回复
CHtmlView有上述事件响应吗?没找到。
另外我的描述不够准确,除了我所说的点击链接情况外,还有另一种情况:我自己调用Navigate2后跟踪的时候最先进入BeforeNavigate2,按照CHtmlView的流程,还有在此之前的事件吗?
masterz 2002-05-17
  • 打赏
  • 举报
回复
mouseover
onclick
蒋晟 2002-05-17
  • 打赏
  • 举报
回复
They are not events for a WebBrowser.
Click event was fired by HTML Element, you can connect to the event containder to handle them
search this article in MSDN:"Handling HTML Element Events"

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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