3,245
社区成员
发帖
与我相关
我的任务
分享
switch (dispID)
{
case DISPID_NEWWINDOW3:
AfxMessageBox(L"拦截打开新窗口!");
*pParams->rgvarg[3].pboolVal = VARIANT_TRUE;
break;
default:
break;
}
return S_OK;
即可实现拦截新窗口。
我们把这个事件处理类写好以后,给它实例化一个对象,然后连接上事件连接点就行了。
//获得WebBrowser的连接点容器
CComQIPtr<IConnectionPointContainer> spContainer(m_WebBrowser.GetControlUnknown());
//找到我们需要的事件接口 DWebBrowserEvents2
spContainer->FindConnectionPoint(__uuidof(DWebBrowserEvents2), &m_spConnectPoint);
//连接上连接点
HRESULT h = m_spConnectPoint->Advise(&m_sink, &m_dwCookie);
m_WebBrowser即是你的WebBrowser的activex控件对象,
m_spConnectPoint是一个连接点对象CComQIPtr<IConnectionPoint> m_spConnectPoint;
m_dwCookie是一个DWORD,用来保存与COM服务器的身份标示。
m_sink即是自己写的事件处理类实例化的一个对象。
如果不清楚的话可以看我写的这个简单的工程。VS2010的。
http://pan.baidu.com/s/1pJloiuR
如果对COM事件连接点,IDispatch接口,这些不熟悉的话,可以先看一下这方面的资料。
COM事件连接点:http://www.vckbase.com/index.php/wv/1257.html
点击这篇文章的作者“杨老师”,还可以看到他写的总共18篇COM组件的文章。通俗易懂。