在BeforeNavigate中获得访问地址URL

 

在点击网页中的一个链接时,会多次调用控件的BeforeNavigate2消息处理函数,我们怎么样才能在其中获取到我们所点击的链接地址呢。
如果是基于web browser控件的开发,可以按如下方法实现:
void CIEDialog::OnBeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel)
{
 HRESULT   hr;  
 LPUNKNOWN lpUnknown;  
 LPUNKNOWN lpUnknownWB = NULL;  
 LPUNKNOWN lpUnknownDC = NULL;
 lpUnknown = m_cWebBrowser.GetControlUnknown(); 
 ASSERT(lpUnknown);
 hr = lpUnknown->QueryInterface( IID_IUnknown, (LPVOID*)&lpUnknownWB );     
 ASSERT(SUCCEEDED(hr));      
 if (FAILED(hr))        
  return;          
 hr = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC );      
 ASSERT(SUCCEEDED(hr));      
 if ( SUCCEEDED(hr) && lpUnknownWB == lpUnknownDC )     
 {
  TCHAR szUrl[MAX_PATH];
  _tcscpy( szUrl, (TCHAR*)(_bstr_t)URL );
  AfxMessageBox( "此时即时你所点击的链接点下的URL" ); 
  AfxMessageBox( szUrl ); 
 }
}

若是基于CHtmlView的工程,如下可实现:
void CXXHtmlView::BeforeNavigate2(LPDISPATCH  pDisp , VARIANT* URL,
  VARIANT* Flags, VARIANT* TargetFrameName,
  VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
{
  IOleWindow *pOWin=NULL;
  HWND hBWnd = NULL; 
  HRESULT   hRes   =   m_pBrowserApp->QueryInterface(IID_IOleWindow,   (void   **)&pOWin);  
  if   (SUCCEEDED(hRes))  
  {  
   hRes   =   pOWin->GetWindow(&hBWnd);  
   if   (SUCCEEDED(hRes))  
   {  
    CWnd *pWnd = CWnd::FromHandle( hBWnd );
    if( pWnd )
    {
     LPUNKNOWN lpUnknown;  
     LPUNKNOWN lpUnknownWB = NULL;  
     LPUNKNOWN lpUnknownDC = NULL;
     lpUnknown = pWnd->GetControlUnknown();  
     ASSERT(lpUnknown); 
     
     if (lpUnknown)  
     {          
      hRes = lpUnknown->QueryInterface( IID_IUnknown, (LPVOID*)&lpUnknownWB );     
      ASSERT(SUCCEEDED(hRes));      
      if (FAILED(hRes))        
       return;          
      hRes = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC );      
      ASSERT(SUCCEEDED(hRes));      
      if ( SUCCEEDED(hRes) && lpUnknownWB == lpUnknownDC ) 
      {
       TCHAR szUrl[MAX_PATH];
       _tcscpy( szUrl, (TCHAR*)(_bstr_t)URL );
       AfxMessageBox( "此时即时你所点击的链接点下的URL" ); 
       AfxMessageBox( szUrl ); 
      }
      
     }  
    } 
   }
  }
}

若有问题,请批评指正,谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值