Пытаюсь отловить 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_ ) проходит нормально. Однако событие не ловится.
Подскажите, в чем может быть проблема?
Здравствуйте, Nihasa, Вы писали:
N>N>BEGIN_SINK_MAP(CToolBandObject)
N> SINK_ENTRY_EX(0, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)
N>END_SINK_MAP()
N>
N>Подскажите, в чем может быть проблема?
0 — идентификатор контрола?
Здравствуйте, spock, Вы писали:
S>0 — идентификатор контрола?
Делал по
указанной статьеАвтор(ы): Владислав Чистяков
.
Доступ к браузеру получаю следующим образом.
CComPtr<IServiceProvider> services;
if (SUCCEEDED(m_spUnkSite.QueryInterface(&services)))
{
services->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (void**)&Browser_));
}
Вообще контрол нигде не рисуется и используется исключительно для вызова Navigate2() и получения текущего url.
Вообще может есть статейка конкретно для такого случая?
Здравствуйте, 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<>Автор(ы): Владислав Чистяков
Дата: 02.10.2002
.