5

私は 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 イベントだけです。

4

2 に答える 2

1

おそらく LIBID_MSHTML のバージョンが一致していないため、バージョン 4.0 に変更してみてください。

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

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

于 2010-05-26T13:36:27.687 に答える
0

この機能を試してください -

VARIANT_BOOL attachEvent( _bstr_t event, IDispatch *pdisp)

元:-

MSHTML::IHTMLDocument3Ptr pDoc3 = 0;
pDoc.QueryInterface(IID_IHTMLDocument3,&pDoc3);
IDispatchEx evtClick;

pDoc3->attachEvent(_bstr_t(L"onclick"),&evtClick);
于 2010-07-02T13:55:45.387 に答える