Отлов BeforeNavigare2 из IE тулбара
От: Nihasa Россия  
Дата: 31.07.08 06:01
Оценка:
Пытаюсь отловить BeforeNavigare2 событие из IE тулбара.
Вот код:

class ATL_NO_VTABLE CToolBandObject :
    public CComObjectRootEx<CComSingleThreadModel>
    ,public CComCoClass<CToolBandObject, &CLSID_ToolBandObject>
    ,public IObjectWithSiteImpl<CToolBandObject>
    ,public IDeskBand
    ,public IDispEventImpl<0, CToolBandObject, &DIID_DWebBrowserEvents2, &LIBID_IEToolBandLib, 1, 0>
    ,public IToolBandObject

...

private:
    CComPtr<IWebBrowser2> Browser_;

...

BEGIN_COM_MAP(CToolBandObject)
    COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents2, CToolBandObject)
END_COM_MAP()

...

BEGIN_SINK_MAP(CToolBandObject)
    SINK_ENTRY_EX(0, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)
END_SINK_MAP()

...

HRESULT __stdcall BeforeNavigate2( IDispatch *pDisp, VARIANT *url, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers, VARIANT_BOOL *Cancel );


Вызов DispEventAdvise( Browser_ ) проходит нормально. Однако событие не ловится.

Подскажите, в чем может быть проблема?
Re: Отлов BeforeNavigare2 из IE тулбара
От: spock Россия  
Дата: 31.07.08 09:36
Оценка:
Здравствуйте, Nihasa, Вы писали:

N>
N>BEGIN_SINK_MAP(CToolBandObject)
N>    SINK_ENTRY_EX(0, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)
N>END_SINK_MAP()
N>


N>Подскажите, в чем может быть проблема?


0 — идентификатор контрола?
Re[2]: Отлов BeforeNavigare2 из IE тулбара
От: Nihasa Россия  
Дата: 31.07.08 12:29
Оценка:
Здравствуйте, spock, Вы писали:

S>0 — идентификатор контрола?


Делал по указанной статье
Автор(ы): Владислав Чистяков
.

Доступ к браузеру получаю следующим образом.

CComPtr<IServiceProvider> services;

if (SUCCEEDED(m_spUnkSite.QueryInterface(&services)))
{
    services->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (void**)&Browser_));
}


Вообще контрол нигде не рисуется и используется исключительно для вызова Navigate2() и получения текущего url.

Вообще может есть статейка конкретно для такого случая?
Re: Отлов BeforeNavigare2 из IE тулбара
От: Vi2 Удмуртия http://www.adem.ru
Дата: 01.08.08 04:59
Оценка:
Здравствуйте, Nihasa, Вы писали:

N>Пытаюсь отловить BeforeNavigare2 событие из IE тулбара.

N>Вот код:
N>class ATL_NO_VTABLE CToolBandObject :
N>...
N>    ,public IDispEventImpl<0, CToolBandObject, &DIID_DWebBrowserEvents2, &LIBID_IEToolBandLib, 1, 0>
N>...
N>BEGIN_SINK_MAP(CToolBandObject)
N>    SINK_ENTRY_EX(0, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)
N>END_SINK_MAP()
N>...
N>HRESULT __stdcall BeforeNavigate2( IDispatch *pDisp, VARIANT *url, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers, VARIANT_BOOL *Cancel );

N>Вызов DispEventAdvise( Browser_ ) проходит нормально. Однако событие не ловится.
N>Подскажите, в чем может быть проблема?

Не срабатывает BeforeNavigate2
Автор: alexora
Дата: 21.08.04
. Коротко: нужно заменить SINK_ENTRY_EX на SINK_ENTRY_INFO, потому что есть Ошибка в реализации IDispEventImpl&lt;&gt;
Автор(ы): Владислав Чистяков
Дата: 02.10.2002
.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.