मैं एक BHO चला रहा हूँ और मैं HTMLDocumentEvents2 का उपयोग कर OnClick घटनाओं को पकड़ने के लिए कोशिश कर रहा हूँ में HTMLDocumentEvents2 का उपयोग कर ऑनक्लिक ईवेंट पकड़ने हालांकि, घटनाओं कभी नहीं हैंडलरसमस्या एक BHO
तक पहुंचने के लिए इस मैं क्या कर रहा हूँ है लगते हैं:
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 आदि का उपयोग करके) या सेटसाइट से दस्तावेज़ पर सलाह देने या विभिन्न वस्तुओं पर सलाह देने की कोशिश की है। मेरा हैंडलर कभी नहीं बुलाया जाता है।
किसी भी मदद की बहुत सराहना की जाएगी। मुझे बस ऑनक्लिक घटना की ज़रूरत है।