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
0
A
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
contenantDISPATCH_METHOD
("une méthode devient invoquaient")dispIdMember
étant0
/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))
{
// ...
}
}
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
Utilisez' HRESULT STDMETHODCALLTYPE Invoquer (/ * params * /) 'ou' STDMETHOD (Invoke) (/ * params * /) 'pour la déclaration. –
Merci! une dernière question: dans la méthode invoke, comment utiliser l'IDispatch actuel? – shaimagz