L'événement de souris BHO
-
18-09-2019 - |
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?
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
contenantDISPATCH_METHOD
( "une méthode est invoquée obtenir" ) -
dispIdMember
être0
/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))
{
// ...
}
}