Red de conocimiento informático - Material del sitio web - En el proyecto MFC, ¿quién llama implícitamente a OnBeforeNavigate2? ¿Cómo comprobar quién llama a esta función de llamada implícita?

En el proyecto MFC, ¿quién llama implícitamente a OnBeforeNavigate2? ¿Cómo comprobar quién llama a esta función de llamada implícita?

Para la clase MFC, el código fuente está en C:\Program Files\Microsoft Visual Studio\VC98\MFC\path. El OnBeforNavigate2 que desea ver es una función virtual de CHtmlView, que está definida en AFXHTML.H y VIEWHTML.CPP. , sólo necesitas buscar estos dos archivos en él. CPP, sólo necesita buscar estos dos archivos en la ruta anterior.

void CHtmlView::BeforeNavigate2(LPDISPATCH /* pDisp */, VARIANT* URL,

VARIANT* Flags, VARIANT* TargetFrameName,

VARIANT* PostData, VARIANT* Encabezados, BOOL* Cancelar)

{

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(Cancelar!= NULL);

USES_CONVERSION;

VARIANT* vtPostedData = V_VARIANTREF(PostData);

Matriz CByteArray;

if (V_VT( vtPostedData ) & VT_ARRAY)

{

// Debe ser un vector de bytes

ASSERT(vtPostedData-> array->cDims == 1 && vtPostedData-> parray->cbElements == 1);

vtPostedData->vt |= VT_UI1;

COleSafeArray seguro(vtPostedData);

DWORD dwSize = seguro.SetSize (dwSize);

LPBYTE lpByte = array.GetData();

memcpy(lpByte, pVoid, dwSize);

safe.AccessData(&pVoid);

matriz.

CString strTargetFrameName(V_BSTR(TargetFrameName));

CString strURL = V_BSTR(URL);

CString strHeaders = V_ BSTR(Headers);

DWORD nFlags = V_I4(Flags);

// Notificar clase de usuario

OnBeforeNavigate2(strURL, nFlags, strTargetFrameName,< / p>

array, strHeaders, Cancel);

}

Después de verificar el código fuente, descubrí que OnBeforeNavigate2 se llama beforeNavigate2 de CHtmlView, AFX_IDW_PANE_FIRST, 250 /* BeforeNavigate2 * /, BeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS _PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)

Aprende que esta función es una respuesta a un evento.

Con el código fuente, no hay secretos, puedes profundizar más por tu cuenta