在MFC工程中,OnBeforeNavigate2是被谁隐式调用的??对于这类隐式调用函数应该怎样查看是谁调用的它?

 我来答
百度网友d078d7e68
2011-03-24 · 超过12用户采纳过TA的回答
知道答主
回答量:27
采纳率:0%
帮助的人:34.5万
展开全部
对于MFC的类,源码在C:\Program Files\Microsoft Visual Studio\VC98\MFC\路径下,你要查看的OnBeforNavigate2是CHtmlView的一个虚函数,它的定义在AFXHTML.H,和VIEWHTML.CPP中,你在上面的路径下搜索这两个文件就可以了。
void CHtmlView::BeforeNavigate2(LPDISPATCH /* pDisp */, VARIANT* URL,
VARIANT* Flags, VARIANT* TargetFrameName,
VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
{
ASSERT(V_VT(URL) == VT_BSTR);
ASSERT(V_VT(TargetFrameName) == VT_BSTR);
ASSERT(V_VT(PostData) == (VT_VARIANT | VT_BYREF));
ASSERT(V_VT(Headers) == VT_BSTR);
ASSERT(Cancel != NULL);

USES_CONVERSION;

VARIANT* vtPostedData = V_VARIANTREF(PostData);
CByteArray array;
if (V_VT(vtPostedData) & VT_ARRAY)
{
// must be a vector of bytes
ASSERT(vtPostedData->parray->cDims == 1 && vtPostedData->parray->cbElements == 1);

vtPostedData->vt |= VT_UI1;
COleSafeArray safe(vtPostedData);

DWORD dwSize = safe.GetOneDimSize();
LPVOID pVoid;
safe.AccessData(&pVoid);

array.SetSize(dwSize);
LPBYTE lpByte = array.GetData();

memcpy(lpByte, pVoid, dwSize);
safe.UnaccessData();
}
// make real parameters out of the notification

CString strTargetFrameName(V_BSTR(TargetFrameName));
CString strURL = V_BSTR(URL);
CString strHeaders = V_BSTR(Headers);
DWORD nFlags = V_I4(Flags);

// notify the user's class
OnBeforeNavigate2(strURL, nFlags, strTargetFrameName,
array, strHeaders, Cancel);
}
查看源码,得知是CHtmlView的BeforeNavigate2调用了OnBeforeNavigate2,在查看BeforeNavigate2的引用,
ON_EVENT(CHtmlView, AFX_IDW_PANE_FIRST, 250 /* BeforeNavigate2 */, BeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
得知该函数为一个事件响应。
有了源码,就没有秘密,更深的可以自己去挖掘了
追问
谢谢。请问如何查看BeforeNavigate2的引用
追答
如果在vc下,右键,点击find reference即可,也可以查找ctrl+f。
ustbhwg
2011-03-24 · TA获得超过503个赞
知道小有建树答主
回答量:189
采纳率:100%
帮助的人:67.1万
展开全部
继承该函数,在里面加个断点,调试,运行到那的时候会停在那。然后打开Stack,就能看到哪调用的该函数了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式