Доброго времени суток. Наверна тема заезджена http://www.wasm.ru/forum/viewtopic.php?id=35838, прошу не ругать. Есть ли у когонибудь пример использование контрола WebBrowser с коррекстным обработчиком события NewWindow ?? Тоесть что б новое окно браузера создавалось в моем приложении, с куками, а не вызывался обычный ИЕ .
Устанавливаете обработчик Код (Text): bool SetEventHandler() { HRESULT r; IConnectionPointContainer* connectionPointContainer; r=this->webBrowser->QueryInterface( IID_IConnectionPointContainer, (void**)&connectionPointContainer ); IConnectionPoint* connectionPoint; r=connectionPointContainer->FindConnectionPoint( DIID_DWebBrowserEvents2, &connectionPoint ); connectionPointContainer->Release(); // DWebBrowserEvents2* implicitly casts to IUnknown DWORD cookie; r=connectionPoint->Advise( dynamic_cast<DWebBrowserEvents2*>(this), &cookie ); return true; } хотя удобнее юзать ATL Код (Text): bool SetEventHandler() { HRESULT r; ATL::CComQIPtr<IConnectionPointContainer> connectionPointContainer(this->webBrowser); ATL::CComPtr<IConnectionPoint> connectionPoint; r=connectionPointContainer->FindConnectionPoint(DIID_DWebBrowserEvents2, &connectionPoint ); DWORD cookie; r=connectionPoint->Advise(dynamic_cast<IDispatch*>(this), &cookie ); // IDispatch of DWebBrowserEvents2 return true; } Затем реализуете IDispatch который будет обрабатывать DISPID_NEWWINDOW3 Код (Text): HRESULT __stdcall DWebBrowserEvents2::IDispatch::Invoke(DISPID dispIdMember, REFIID /*riid*/, LCID /*lcid*/, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr ) { switch(dispIdMember ) { case DISPID_NEWWINDOW3: NewWindow3 ( pDispParams->rgvarg[4].ppdispVal , pDispParams->rgvarg[3].pboolVal , pDispParams->rgvarg[2].intVal , pDispParams->rgvarg[1].bstrVal , pDispParams->rgvarg[0].bstrVal ); break; default: return DISP_E_MEMBERNOTFOUND; }; return S_OK; } void NewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl ) { ......... }