鼠标事件BHO [英] Mouse Event 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); //像这样的东西
<_ code> <_
someElement-> put_onmousedown(CComVariant(spDisp));
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
containingDISPATCH_METHOD
("a method is getting invoked")dispIdMember
being0
/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屋!