حدث الماوس BHO.
-
18-09-2019 - |
سؤال
أريد أن أستمع من BHO إلى حدث OnMousedown في بعض العناصر في صفحة ويب معينة. لدي كل الكود الذي يجد العنصر المحدد، وفي MSDN يقول إنني بحاجة إلى استخدام get_onmousedown. حدث. لقد توصلت إلى هذا الرمز.
CComQIPtr<IHTMLElement> someElement;
VARIANT mouse_eve;
someElement->get_onmousedown(&mouse_eve);
السؤال هو، كيف أقول ذلك لتشغيل بعض الوظائف عند حدوث هذا الحدث؟
المحلول
v
- متغير من النوع VT_DISPATCH الذي يحدد واجهة IDISPatch لكائن مع طريقة افتراضية يتم استدعاءها عند حدوث الحدث.
حفلات الحدث في هذا السياق هي حالات 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))
{
// ...
}
}
لا تنتمي إلى StackOverflow