在网上搜索了好久,有关浏览器控制方面的资料的确有限,只好求助于msdn 了。
我想在 Invoke()中处理 DISPID_DOWNLOADCOMPLETE 消息,对应的处理函数是DocumentComplete(LPDISPATCH pDisp, VARIANT* URL),我想在该函数中得到网页的源代码,在 msdn 中 WebBrowser Control 篇中有这么一个 sample:void CMyClass::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)
{
HRESULT hr;
IUnknown* pUnkBrowser = NULL;
IUnknown* pUnkDisp = NULL;
IDispatch* pDocDisp = NULL;
IHTMLDocument2* pDoc = NULL; // Is this the DocumentComplete event for the top frame window?
// Check COM identity: compare IUnknown interface pointers.
hr = m_pBrowser->QueryInterface(IID_IUnknown, (void**)&pUnkBrowser); if (SUCCEEDED(hr))
{
hr = pDisp->QueryInterface(IID_IUnknown, (void**)&pUnkDisp); if (SUCCEEDED(hr))
{
if (pUnkBrowser == pUnkDisp)
{
// This is the DocumentComplete event for the top frame.
// This page is loaded, so we can access the DHTML Object Model.
hr = m_pBrowser->get_Document(&pDocDisp); if (SUCCEEDED(hr))
{
// Obtained the document object.
pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc);
if (SUCCEEDED(hr))
{
// Obtained the IHTMLDocument2 interface for the document object
ProcessDocument(pDoc);
} pDocDisp->Release();
}
} pUnkDisp->Release();
} pUnkBrowser->Release();
}
}
我的问题是处理 DISPID_DOWNLOADCOMPLETE 消息时我该怎样传递
DocumentComplete(LPDISPATCH pDisp, VARIANT* URL) 的第一个参数,我试过
给它传递 this 指针,结果根本得不到 pUnkBrowser == pUnkDisp。
到底该如何传递这个参数,还望各位仁兄指点!不胜感激!
我想在 Invoke()中处理 DISPID_DOWNLOADCOMPLETE 消息,对应的处理函数是DocumentComplete(LPDISPATCH pDisp, VARIANT* URL),我想在该函数中得到网页的源代码,在 msdn 中 WebBrowser Control 篇中有这么一个 sample:void CMyClass::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)
{
HRESULT hr;
IUnknown* pUnkBrowser = NULL;
IUnknown* pUnkDisp = NULL;
IDispatch* pDocDisp = NULL;
IHTMLDocument2* pDoc = NULL; // Is this the DocumentComplete event for the top frame window?
// Check COM identity: compare IUnknown interface pointers.
hr = m_pBrowser->QueryInterface(IID_IUnknown, (void**)&pUnkBrowser); if (SUCCEEDED(hr))
{
hr = pDisp->QueryInterface(IID_IUnknown, (void**)&pUnkDisp); if (SUCCEEDED(hr))
{
if (pUnkBrowser == pUnkDisp)
{
// This is the DocumentComplete event for the top frame.
// This page is loaded, so we can access the DHTML Object Model.
hr = m_pBrowser->get_Document(&pDocDisp); if (SUCCEEDED(hr))
{
// Obtained the document object.
pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc);
if (SUCCEEDED(hr))
{
// Obtained the IHTMLDocument2 interface for the document object
ProcessDocument(pDoc);
} pDocDisp->Release();
}
} pUnkDisp->Release();
} pUnkBrowser->Release();
}
}
我的问题是处理 DISPID_DOWNLOADCOMPLETE 消息时我该怎样传递
DocumentComplete(LPDISPATCH pDisp, VARIANT* URL) 的第一个参数,我试过
给它传递 this 指针,结果根本得不到 pUnkBrowser == pUnkDisp。
到底该如何传递这个参数,还望各位仁兄指点!不胜感激!
解决方案 »
- MFC如何设置圆角形裁剪区
- 求助 CREATE TABLE 的语法问题
- 请高手帮忙!!!!如何通过VC获取Excel中嵌入的word对象
- 一次提问三个问题,请大家不要嫌多。
- 就这么多分了了,基础问题,各位老师讲解下
- 看看下面的程序内存有没溢出或其他问题,我是通过循环执行的
- 高分求绘制树状结构的组件或者源码或者相关信息,来客皆有分^_^(2)
- 如何从有规律的字符串中提出需要的内容。例如提取“######2323#######@@@”中的2323。
- COM+ 远程调用的问题,看这段代码!!!!!!
- 哪里有DirectX9.0的设计时库啊,我下载的9.0为什么找不到.h.lib呀,帮帮我好吗?再线等
- 过高程,放分
- 如何在vc中调用audio 或 video的解码器,如:divx
STDMETHODIMP CSpyIE::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
USES_CONVERSION;
if(pDispParams==NULL)
return E_INVALIDARG;
switch(dispidMember)
{
case DISPID_NAVIGATECOMPLETE2:
{
IDispatch*pDisp=NULL;
HRESULT hr = m_pWebBrowser2->QueryInterface(IID_IDispatch, (void**)&pDisp);
_ASSERT(SUCCEEDED(hr));
if (pDispParams->rgvarg[1].pdispVal == pDisp )
{
m_Disp=pDisp;
}
}
break;
// The parameters for this DISPID:
// [0]: URL navigated to - VT_BYREF|VT_VARIANT
// [1]: An object that evaluates to the top-level or frame
// WebBrowser object corresponding to the event.
case DISPID_DOCUMENTCOMPLETE:
if (pDispParams->rgvarg[1].pdispVal == m_Disp )
{
...
}
}
}
//for more details ,see MSDN example :IEHelper
只有有限的几个相关参数
// The parameters for this DISPID:
// [0]: URL navigated to - VT_BYREF|VT_VARIANT
// [1]: An object that evaluates to the top-level or frame
// WebBrowser object corresponding to the event.
感谢指点。
另外,是否有时间回答我的另外一个问题: 我想控制浏览器的下载( WebBrowser Control ),即在 IDispatch::Invoke()
中处理 DISPID_AMBIENT_DLCONTROL 消息,msdn 中相关代码:STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember, REFIID riid,
LCID lcid, WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
switch (dispidMember)
{
case DISPID_AMBIENT_DLCONTROL:
pvarResult->vt = VT_I4;
pvarResult->lVal = DLCTL_DLIMAGES | DLCTL_VIDEOS | DLCTL_NO_SCRIPTS;
break; default:
return DISP_E_MEMBERNOTFOUND;
} return S_OK;
} 问题是我在我的程序中加入上述代码后调试发现根本就没有DISPID_AMBIENT_DLCONTROL 消息出现,我的程序根本就不会运行对应的处理代码。
????!!!!! 的确是不明白,我已经加过了头文件 mshtmhst.h!