CHtmlView 截获 Html 点击href

截获用户的输入,在类 CHtmlView 中有一个事件 OnBeforeNavigate2 ,当浏览器被重新导向之前,会激活这个事件。比如说每当用户按下了 HTML 中的超级链接,或者用户在地址栏输入新的地址,还有程序员调用接口的 Navigate 方法,浏览器要转向新地址的时候,都会激活这个事件。而在这里,当你实现 HTML 界面的时候,用户通过点击页面上的链接来激活命令,所以我们可以在这个事件里做一些处理,这个事件的参数中有两个比较重要, lpszURL 就是在 HTML 页面中 href 指定的地址,你可以给各个链接设置相应的地址,通过这个参数的内容就可以识别用户点击的链接。而 pbCancel 可以指定是否取消导向,只要写入 *pbCancel = TRUE ,导向就被取消,不会发生了, CHtmlView 显示的还是现在的页面。


void CXXXView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel)
{
    if (ProcessCommand(lpszURL))
    {
        *pbCancel = TRUE;
    }
    else
    {
        CHtmlView::OnBeforeNavigate2(lpszURL, nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
    }
} 


// 解析html中的命令
bool CXXXView::ProcessHtmlCommand(LPCTSTR lpszURL)
{
    CString str = lpszURL;
    AfxMessageBox(str);
    if(-1 != str.Find("fileDlg.open")){
        //::AfxMessageBox("fileDlg.open");
        CFileDialog fd(true);
        if(IDOK == fd.DoModal())AfxMessageBox(fd.GetFileName());
         return true;
    }
    return false;
}
 
最好屏蔽掉鼠标右键,所以还应该重载 PreTranslateMessage ,并加入如下代码。
BOOL CXXXView::PreTranslateMessage(MSG* pMsg)
{
if ((pMsg->message == WM_RBUTTONDOWN) ||
(pMsg->message == WM_RBUTTONDBLCLK))
return TRUE;
else
return CHtmlView::PreTranslateMessage(pMsg);
} 

 

 

 

 

 


你可能感兴趣的:(CHtmlView 截获 Html 点击href)