gpt4 book ai didi

c++ - 鼠标事件 BHO

转载 作者:行者123 更新时间:2023-11-28 01:12:03 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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.

此上下文中的事件处理程序是实现 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))
{
// ...
}
}

关于c++ - 鼠标事件 BHO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com