WebBrowser

Тема в разделе "WASM.WIN32", создана пользователем DooMer, 14 сен 2010.

  1. DooMer

    DooMer New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2010
    Сообщения:
    2
    Доброго времени суток. Наверна тема заезджена http://www.wasm.ru/forum/viewtopic.php?id=35838, прошу не ругать. Есть ли у когонибудь пример использование контрола WebBrowser с коррекстным обработчиком события NewWindow ?? Тоесть что б новое окно браузера создавалось в моем приложении, с куками, а не вызывался обычный ИЕ .
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Устанавливаете обработчик
    Код (Text):
    1.     bool SetEventHandler()
    2.     {
    3.         HRESULT r;
    4.  
    5.         IConnectionPointContainer* connectionPointContainer;
    6.         r=this->webBrowser->QueryInterface( IID_IConnectionPointContainer, (void**)&connectionPointContainer );
    7.  
    8.         IConnectionPoint* connectionPoint;
    9.         r=connectionPointContainer->FindConnectionPoint( DIID_DWebBrowserEvents2, &connectionPoint );
    10.  
    11.         connectionPointContainer->Release();
    12.  
    13.         // DWebBrowserEvents2* implicitly casts to IUnknown
    14.         DWORD cookie;
    15.         r=connectionPoint->Advise( dynamic_cast<DWebBrowserEvents2*>(this), &cookie );
    16.  
    17.         return true;
    18.     }
    хотя удобнее юзать ATL
    Код (Text):
    1.     bool SetEventHandler()
    2.     {
    3.         HRESULT r;
    4.  
    5.         ATL::CComQIPtr<IConnectionPointContainer> connectionPointContainer(this->webBrowser);
    6.         ATL::CComPtr<IConnectionPoint> connectionPoint;
    7.         r=connectionPointContainer->FindConnectionPoint(DIID_DWebBrowserEvents2, &connectionPoint );
    8.         DWORD cookie;
    9.         r=connectionPoint->Advise(dynamic_cast<IDispatch*>(this), &cookie ); // IDispatch of DWebBrowserEvents2
    10.         return true;
    11.     }
    Затем реализуете IDispatch который будет обрабатывать DISPID_NEWWINDOW3
    Код (Text):
    1.     HRESULT __stdcall DWebBrowserEvents2::IDispatch::Invoke(DISPID dispIdMember, REFIID /*riid*/, LCID /*lcid*/,
    2.         WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr )
    3.     {
    4.         switch(dispIdMember )
    5.         {
    6.         case DISPID_NEWWINDOW3:
    7.             NewWindow3
    8.                 (   pDispParams->rgvarg[4].ppdispVal
    9.                 ,   pDispParams->rgvarg[3].pboolVal
    10.                 ,   pDispParams->rgvarg[2].intVal
    11.                 ,   pDispParams->rgvarg[1].bstrVal
    12.                 ,   pDispParams->rgvarg[0].bstrVal
    13.                 );
    14.             break;
    15.         default:
    16.             return DISP_E_MEMBERNOTFOUND;
    17.         };
    18.         return S_OK;
    19.     }
    20.  
    21.     void NewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl )
    22.     {
    23.         .........
    24.     }
     
  3. DooMer

    DooMer New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2010
    Сообщения:
    2
    Спасибо ! буду пробовать !!!