首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ATL的宏处理HTMLElementEvents2时处理DWebBrowserEvents2

使用ATL的宏处理HTMLElementEvents2时处理DWebBrowserEvents2
EN

Stack Overflow用户
提问于 2009-07-09 21:59:38
回答 1查看 2.9K关注 0票数 1

我正在使用VS2008,C++创建一个浏览器助手对象。我的类是从IDispEventImpl派生而来的

代码语言:javascript
复制
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 (检测点击、滚动条等)为此,我对IHTMLElement的IHTMLDocument2对象进行了QueryInterface(),对IConnectionPointContainer调用了IHTMLElement的QueryInterface()对象,并调用了(参见msdn's article。问题是,当我在我的类中重写IDispatch::Invoke时,DWebBrowserEvents2句柄(使用ATL宏创建)失败。有没有办法在不重写Invoke的情况下处理HTMLElementEvents2,或者以只处理HTMLElementEvents2的方式实现invoke?

谢谢,任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-17 20:34:12

实际上并不需要重写Invoke或获取IConnectionPointContainer。因为这是一个ATL项目,所以实现另一个IDispEventImpl:

代码语言:javascript
复制
public IDispEventImpl<2, CHelloWorldBHO, &DIID_HTMLTextContainerEvents2, &LIBID_MSHTML, 4, 0>

真的很管用。然后,接收条目,如下所示:

代码语言:javascript
复制
SINK_ENTRY_EX(2, DIID_HTMLTextContainerEvents2, DISPID_ONSCROLL, OnScroll)

在OnDocumentComplete中,调用IWebBrowser2::get_Document、IHTMLDocument2::get_body,然后调用DispEventAdvise开始接收事件。

请注意,我使用的是DIID_HTMLTextContainerEvents2而不是DIID_HTMLElementEvents。这是因为body对象不支持HTMLElementEvents2,就我的目的(处理滚动)而言,它工作得很好!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1106659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档