2010-03-09 4 views
0

Je souhaite que mon BHO écoute l'événement onmousedown de certains éléments d'une certaine page Web. J'ai tout le code qui trouve l'élément spécifique, et dans msdn il dit que j'ai besoin d'utiliser l'événement get_onmousedown. Je suis venu avec ce code. La question est, comment puis-je lui dire d'exécuter certaines fonctions lorsque cet événement se produit?Mouse Event BHO

Répondre

3

v - VARIANT de type VT_DISPATCH qui spécifie l'interface IDispatch d'un objet avec une méthode par défaut qui est invoquée lorsque l'événement se produit.

Les gestionnaires d'événements dans ce contexte sont les instances COM qui mettent en œuvre IDispatch - donc vous devez passer un pointeur vers un IDispatch que votre objet gestionnaire d'événements implémente:

CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that 
someElement->put_onmousedown(CComVariant(spDisp)); 

Note: put_ au lieu de get_ - vous voulez enregistrer un gestionnaire.

Sur ce point, IDispatch::Invoke() est appelée avec:

  • wFlags contenant DISPATCH_METHOD ("une méthode devient invoquaient")
  • dispIdMember étant 0/DISPID_VALUE ("la méthode par défaut")

Conjointement ceci devrait devenir moi quelque chose comme:

HRESULT MyHandler::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags, 
          DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*) 
{ 
    // ... 

    if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE)) 
    { 
     // ... 
    } 
} 
+0

ne me permet pas d'ajouter "MainClassName :: Invoke" en fonction: « fonction virtuelle dominante diffère de « ATL :: IDispatchImpl :: Invoke 'seulement en appelant la convention " – shaimagz

+0

Utilisez' HRESULT STDMETHODCALLTYPE Invoquer (/ * params * /) 'ou' STDMETHOD (Invoke) (/ * params * /) 'pour la déclaration. –

+0

Merci! une dernière question: dans la méthode invoke, comment utiliser l'IDispatch actuel? – shaimagz