문제

나는 내 BHO가 특정 웹 페이지에서 일부 요소의 OnMousedown 이벤트를 듣기를 원합니다. 특정 요소를 찾는 모든 코드가 있으며 MSDN에서는 사용해야한다고 말합니다. get_onmousedown 이벤트. 나는이 코드를 생각해 냈다.

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

문제는이 이벤트가 발생할 때 어떤 기능을 실행하라고 어떻게 말합니까?

도움이 되었습니까?

해결책

v - 이벤트가 발생할 때 호출되는 기본 메소드가있는 객체의 idispatch 인터페이스를 지정하는 유형 vt_dispatch의 변형.

이 맥락에서 이벤트 처리기는 구현하는 인스턴스입니다. 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