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?

È stato utile?

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 contenente DISPATCH_METHOD ( "un metodo è sempre invocato" )
  • dispIdMember essere 0 / 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)) 
    {
        // ...
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top