Question

Je veux que mon BHO à écouter onMouseDown cas d'un élément dans une certaine page Web. J'ai tout le code qui trouve l'élément spécifique, et dans son msdn dit que je dois utiliser le get_onmousedown événement. Je suis venu avec ce code.

 CComQIPtr<IHTMLElement> someElement;
 VARIANT mouse_eve;
 someElement->get_onmousedown(&mouse_eve);

La question est, comment puis-je dire pour exécuter une fonction lorsque cet événement se produit?

Était-ce utile?

La solution

  

v -. Variant de type VT_DISPATCH qui spécifie l'interface IDispatch d'un objet avec un procédé 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 est invoquée obtenir" )
  • dispIdMember être 0 / DISPID_VALUE ( "la méthode par défaut" )

Remonté cela devrait devenir quelque chose comme:

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

    if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE)) 
    {
        // ...
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top