How to receive events from more than one source in ATL?

Sodar 2003-04-16 02:01:26
How to receive events from more than one source in ATL? For example, from DWebBrowserEvent2 and HTMLElementEvents2?

I failed to use DispEventAdvise(m_spSite) to establish a connection with the event source represented by IID_HTMLElementEvents2.


感觉翻译成中文不能达意,请各位帮忙。



...全文
44 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sodar 2003-04-17
  • 打赏
  • 举报
回复
哦,是这样,那我回去看一下程序和相关的文档。
多谢阿行兄:)
arxing 2003-04-16
  • 打赏
  • 举报
回复
IE有好多对象,但是你的Site指向的对象不一定支持。
Sodar 2003-04-16
  • 打赏
  • 举报
回复
啊?我。。。。我的对象是IE啊,会不支持吗?

当iid = IID_WebBrowserEvent2时一切都没问题呀。

arxing 2003-04-16
  • 打赏
  • 举报
回复
这表明你的对象不支持source HTMLElementEvents2.
Sodar 2003-04-16
  • 打赏
  • 举报
回复
这段程序代码如下,请阿行帮忙看看。


//从这个函数开始跟踪进去
DispEventAdvise(m_Site, &DIID_HTMLElementEvents2);

ATLINLINE ATLAPI AtlAdvise(IUnknown *pUnkcp, IUnKnown *pUnk, const IID & iid, LPDWORD pdw)
{
 CComPtr <IConnectionPointContainer> pCPC;
 CComPtr <IConnection> pCP;

 HRESULT hRes = pUnkcp->QueryInterface(_uuidof(IConnectionPointContainer), (void **)&pCPC);
 if (SUCCEEDED(hRes))
  hRes = pCPC->FindConnectionPoint(iid, &pCP);
//跟踪到这一句,产生以下执行结果:
//pCPC = 0x00143450
//iid = IID_HTMLElementEvent2
//hRes = -2147467262
//pCP = NULL !!!未得到想要结果!!!
}


多谢了。
:)
arxing 2003-04-16
  • 打赏
  • 举报
回复
DispEventAdvise(m_spSite, &DIID_DWebBrowserEvents2) connect the source of DWebBrowserEvent2, and DispEventAdvise(m_spSite, &IID_HTMLElementEvents2) connect the source of HTMLElementEvents2.
arxing 2003-04-16
  • 打赏
  • 举报
回复
class YourClass :
public DispEventImpl<1, YourClass , &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>,
public DispEventImpl<2, YourClass , &IID_HTMLElementEvents2, &LIBID_SHDocVw, 1, 1>,
{
BEGIN_SINK_MAP(YourClass )
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)
SINK_ENTRY_EX(2, IID_HTMLElementEvents2, DISPID_HTMLELEMENTEVENTS2_ONACTIVATE, OnActivate)
END_SINK_MAP()

STDMETHOD_(void,BeforeNavigate2)(IDispatch* pDisp, VARIANT &url, VARIANT &Flags, VARIANT &TargetFrameName, VARIANT &PostData, VARIANT &Headers, VARIANT_BOOL* &Cancel);

STDMETHOD_(void,OnActivate)(IHTMLEventObj* pEvtObj);
}
Sodar 2003-04-16
  • 打赏
  • 举报
回复
help!

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧