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?
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