c++ - 在 BHO 中使用 HTMLDocumentEvents2 捕获 OnClick 事件时出现问题

标签 c++ dom com atl bho

我正在运行一个 BHO,我正在尝试使用 HTMLDocumentEvents2 捕获 OnClick 事件 然而,事件似乎永远不会到达处理程序

这就是我正在做的:

class ATL_NO_VTABLE CBlastBhoBHO :
  public CComObjectRootEx<CComSingleThreadModel>,
  public CComCoClass<CBlastBhoBHO, &CLSID_BlastBhoBHO>,
  public IObjectWithSiteImpl<CBlastBhoBHO>,
  public IDispatchImpl<IBlastBhoBHO, &IID_IBlastBhoBHO, &LIBID_BlastBhoLib, /*wMajor     =*/ 1, /*wMinor =*/ 0>,
  public IDispEventImpl<0, CBlastBhoBHO, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 1, 0>,
  public IDispEventImpl<1, CBlastBhoBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>



BEGIN_SINK_MAP(CBlastBhoBHO)
SINK_ENTRY_EX(0, DIID_HTMLDocumentEvents2, DISPID_HTMLDOCUMENTEVENTS2_ONCLICK,   OnClickTrigger)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE,      OnDocumentComplete)
END_SINK_MAP()


// Handlers
void STDMETHODCALLTYPE CBlastBhoBHO::OnDocumentComplete( IDispatch *pDisp, VARIANT *url) { // works fine }
void STDMETHODCALLTYPE CBlastBhoBHO::OnClickTrigger(IHTMLEventObj *pEvtObj) { // Never called }

// From SetSite()
  ATL::IDispEventSimpleImpl<1,CBlastBhoBHO,&DIID_DWebBrowserEvents2>::DispEventAdvise(m_spWebBrowser); 


// From OnDocumentComplete
 CComQIPtr<IHTMLDocument3> doc_;
m_spWebBrowser->get_Document((IDispatch**) &doc_);
ATL::IDispEventSimpleImpl<0,CBlastBhoBHO,&DIID_HTMLDocumentEvents2>::DispEventAdvise(doc_);

我已经尝试了几种变体(使用 HTMLElementEvents2 等)或对不同对象提出建议或对来自 SetSite 的文档提出建议。我的处理程序从未被调用。

任何帮助将不胜感激。我只需要 onClick 事件。

最佳答案

可能是因为 LIBID_MSHTML 的版本不匹配, 尝试将其更改为 4.0 版,即全部更改

IDispEventImpl<0, CBlastBhoBHO, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, <b>1</b>, 0>

IDispEventImpl<0, CBlastBhoBHO, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, <b>4</b>, 0>

关于c++ - 在 BHO 中使用 HTMLDocumentEvents2 捕获 OnClick 事件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2898903/

相关文章:

c++ - 生成给定集合的子集(使用递归)的程序的执行涉及哪些步骤?

c++ - 如何在标准 C++ 上模拟 Statement Exprs GNU 扩展

javascript - 将 Ember 组件插入特定的 DOM 元素?

javascript - 处理弹出窗口关闭的正确方法

mfc - 我在 VS-2019 中缺少添加新项目 Add "MFC Class From Typelib"

c# - 在 C# 中动态加载和使用 COM 对象

c++ - 窗口在 NVIDIA 显卡上使用 OpenGL 渲染闪烁

Javascript 嵌入式谷歌地图无法完全加载

visual-studio-2010 - 在 Windows 2012 上使用 Visual Studio 2010 构建 MIDL2398 错误

c++ - 二叉搜索树的数组实现