سؤال

أريد أن أستمع من 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)) 
    {
        // ...
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top