我是靠谱客的博主 失眠胡萝卜,最近开发中收集的这篇文章主要介绍解决VS2008中CHtmlView函数OnBeforeNavigate2不能禁止跳转的BUG,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

     VS2008中CHtmlView的OnBeforeNavigate2函数有个莫名其妙的问题,竟然不然实现禁止导航.

 函数定义如下:

void CHtmlView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
 LPCTSTR lpszTargetFrameName, CByteArray& baPostData,
 LPCTSTR lpszHeaders, BOOL* bCancel);

通常在处理自定义协议比如"app:"协议时,使用*bCancel=TRUE来禁止浏览器跳转,但是在VS2008中这样做是无效的.查看函数实现,代码如下:

void CHtmlView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
 LPCTSTR lpszTargetFrameName, CByteArray& baPostData,
 LPCTSTR lpszHeaders, BOOL* bCancel)
{
 // default to continuing
 *bCancel = FALSE;

 // user will override to handle this notification
 UNUSED_ALWAYS(lpszURL);
 UNUSED_ALWAYS(nFlags);
 UNUSED_ALWAYS(lpszTargetFrameName);
 UNUSED_ALWAYS(baPostData);
 UNUSED_ALWAYS(lpszHeaders);
}

竟然有

// default to continuing
 *bCancel = FALSE;

就是说默认跳转,你之前的*bCancel=TRUE就失效了.既然这样真搞不清楚又整了个bCancel参数干啥,真不知道微软那帮程序员咋想的.

 

解决这个问题的简单方法就是自己实现OnBeforeNavigate2,不调用CHtmlView的,如下:

void CxxxxView::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 (_tcsnicmp(lpszURL,"app:",4)==0)
 {
  *pbCancel=TRUE;
  }
 UNUSED_ALWAYS(lpszURL);
 UNUSED_ALWAYS(nFlags);
 UNUSED_ALWAYS(lpszTargetFrameName);
 UNUSED_ALWAYS(baPostedData);
 UNUSED_ALWAYS(lpszHeaders);
 //CHtmlView::OnBeforeNavigate2(lpszURL, nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
}

这样根据*bpCancel的值就可实现是否禁止跳转.

 

最后

以上就是失眠胡萝卜为你收集整理的解决VS2008中CHtmlView函数OnBeforeNavigate2不能禁止跳转的BUG的全部内容,希望文章能够帮你解决解决VS2008中CHtmlView函数OnBeforeNavigate2不能禁止跳转的BUG所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部