Mouse BHO Event
-
18-09-2019 - |
Domanda
Voglio che il mio BHO per ascoltare onMouseDown caso di qualche elemento in una determinata pagina web. Ho tutto il codice che trovare l'elemento specifico, e in MSDN sua dice che ho bisogno di utilizzare il get_onmousedown evento. Sono venuto con questo codice.
CComQIPtr<IHTMLElement> someElement;
VARIANT mouse_eve;
someElement->get_onmousedown(&mouse_eve);
La domanda è: come faccio a dirgli di avviare qualche funzione quando si verifica questo evento?
Soluzione
v
-. Variante di tipo VT_DISPATCH che specifica l'interfaccia IDispatch di un oggetto con un metodo predefinito che viene richiamato quando si verifica l'evento
I gestori di eventi in questo contesto sono le istanze COM che implementano IDispatch
- quindi è necessario passare un puntatore a un IDispatch
che l'oggetto gestore di eventi implementa:
CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that
someElement->put_onmousedown(CComVariant(spDisp));
Nota. put_
invece di get_
- che si desidera registrare un gestore
In questa, IDispatch::Invoke()
viene chiamato con:
-
wFlags
contenenteDISPATCH_METHOD
( "un metodo è sempre invocato" ) -
dispIdMember
essere0
/DISPID_VALUE
( "il metodo di default" )
Mettere insieme questo dovrebbe diventare qualcosa di simile:
HRESULT MyHandler::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*)
{
// ...
if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE))
{
// ...
}
}