我想我BHO听onmousedown事件的一些元素在某些网页。我有所有的代码,找到具体元件,并在msdn地说,我需要用 get_onmousedown 事件。我想出了这个代码。

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

问题是,我该如何告诉它运行的一些职能在这个事件发生的时候?

有帮助吗?

解决方案

v -变种类型VT_DISPATCH指定IDispatch interface的一个对象有一个默认的方法,援引当事件发生。

事件处理程序在这方面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)) 
    {
        // ...
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top