Мышь Event BHO - PullRequest
       29

Мышь Event BHO

0 голосов
/ 09 марта 2010

Я хочу, чтобы мой BHO прослушивал событие onmousedown какого-либо элемента на определенной веб-странице. У меня есть весь код, который находит определенный элемент, и в msdn говорится, что мне нужно использовать событие get_onmousedown . Я придумал этот код.

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

Вопрос в том, как мне сказать, чтобы она выполняла какую-то функцию, когда происходит это событие?

1 Ответ

3 голосов
/ 09 марта 2010

v - VARIANT типа VT_DISPATCH, который указывает интерфейс IDispatch объекта с методом по умолчанию, который вызывается при возникновении события.

Обработчики событий в этом контексте - это COM-экземпляры, которые реализуют IDispatch - поэтому вам нужно передать указатель на IDispatch, который реализует ваш объект обработчика событий:

CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that
someElement->put_onmousedown(CComVariant(spDisp));

Примечание: put_ вместо get_ - вы хотите зарегистрировать обработчик .

На этом IDispatch::Invoke() вызывается с:

  • wFlags содержит DISPATCH_METHOD ( "метод вызывается" )
  • dispIdMember = 0 / DISPID_VALUE ( "метод по умолчанию" )

Вместе это должно выглядеть примерно так:

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

    if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE)) 
    {
        // ...
    }
}
...