鼠标事件BHO [英] Mouse Event BHO

查看:239
本文介绍了鼠标事件BHO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  CComQIPtr< IHTMLElement>一些元素
VARIANT mouse_eve;
someElement-> get_onmousedown(& mouse_eve);

问题是,当这个事件发生时,如何让它运行一些函数?

解决方案


v - VT_DISPATCH类型的VARIANT,


在这个上下文中的事件处理程序是COM实例,它们是在事件发生时调用的默认方法。实现 IDispatch - 所以你需要传递一个指向你的事件处理程序对象实现的 IDispatch

  CComQIPtr< IDispatch> spDisp(spMyHandler); //像这样的东西
someElement-> put_onmousedown(CComVariant(spDisp));
<_ code> <_ get _ - 您要注册处理程序。



://msdn.microsoft.com/en-us/library/ms221479%28VS.85%29.aspxrel =nofollow> IDispatch :: Invoke() 调用:




  • wFlags 包含 DISPATCH_METHOD 调用方法

  • dispIdMember 0 / DISPID_VALUE 默认方法



组合起来应该是这样的:

  HRESULT MyHandler :: Invoke(DISPID dispIdMember,REFIID,LCID,WORD wFlags,
DISPPARAMS *,VARIANT *,EXCEPINFO *,UINT *)
{
// ...
b $ b if((wFlags& DISPATCH_METHOD)&&(dispIdMember == DISPID_VALUE))
{
// ...
}
}


I want my BHO to listen to onmousedown event of some element in a certain webpage. I have all the code that find the specific element, and in msdn its says that I need to use the get_onmousedown event. I came up with this code.

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

The question is, how do I tell it to run some function when this event occurs?

解决方案

v - VARIANT of type VT_DISPATCH that specifies the IDispatch interface of an object with a default method that is invoked when the event occurs.

Event handlers in this context are COM instances that implement IDispatch - so you need to pass a pointer to an IDispatch that your event handler object implements:

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

Note: put_ instead of get_ - you want to register a handler.

On this, IDispatch::Invoke() gets called with:

  • wFlags containing DISPATCH_METHOD ("a method is getting invoked")
  • dispIdMember being 0 / DISPID_VALUE ("the default method")

Put together this should become something like:

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

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

这篇关于鼠标事件BHO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆