鼠标事件BHO

时间:2010-03-09 00:25:13

标签: c++ visual-studio-2005 atl mouseevent bho

我希望我的BHO能够收听特定网页中某些元素的故事。 我有所有找到特定元素的代码,在msdn中它说我需要使用get_onmousedown事件。我想出了这段代码。

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

问题是,如何在发生此事件时告诉它运行某些功能?

1 个答案:

答案 0 :(得分:3)

  

v - VT_DISPATCH类型的VARIANT,它使用在事件发生时调用的默认方法指定对象的IDispatch接口。

此上下文中的事件处理程序是实现IDispatch的COM实例 - 因此您需要将指针传递给事件处理程序对象实现的IDispatch

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

注意:put_而非get_ - 您想要注册处理程序

在此基础上,IDispatch::Invoke()被调用:

  • wFlags包含DISPATCH_METHOD“方法被调用”
  • dispIdMember0 / DISPID_VALUE“默认方法”

把它放在一起应该是这样的:

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

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