我创建使用VS2008,C ++一个浏览器辅助对象。 我的班级已经从IDispEventImpl的以及许多其他衍生
class ATL_NO_VTABLE CHelloWorldBHO :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CHelloWorldBHO, &CLSID_HelloWorldBHO>,
public IObjectWithSiteImpl<CHelloWorldBHO>,
public IDispatchImpl<IHelloWorldBHO, &IID_IHelloWorldBHO, &LIBID_HelloWorldLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
{
.
.
.
BEGIN_SINK_MAP(CHelloWorldBHO)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)//Handle BeforeNavigate2
END_SINK_MAP()
.
.
.
}
从上面的代码显然,我的DWebBrowserEvents2使用ATL的宏处理。 现在我想处理HTMLElementEvents2(检测点击,滚动条等),对于这一点,我的QueryInterface()的的IHTMLDocument2对象IHTMLElement,的QueryInterface()对于的IConnectionPointContainer并调用的IConnectionPointContainer :: FindConnectionPoint(DIID_HTMLElementEvents2)。 (参见MSDN的文章有关处理HTMLElementEvents2)。 问题是,当我在我的课覆盖的IDispatch ::调用,该DWebBrowserEvents2手柄(使用ATL宏创建的)失败。 有没有一种方法来处理HTMLElementEvents2而不覆盖调用,或实现援引这样一种方式,它只能处理HTMLElementEvents2?
谢谢,任何帮助将不胜感激。