c++ IWebBrowser2 как подписаться на событие DWebBrowserEvents2::DocumentComplete ?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by maxfax, 1 Dec 2013.

  1. maxfax

    maxfax New Member

    Joined:
    23 Jun 2010
    Messages:
    25
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, подскажите как использовать события из обьекта IWebBrowser2, ниже приведен код который открывает окно браузера и переходит на нужный url но как подписаться или отловить событие DWebBrowserEvents2::DocumentComplete ?

    Code:
    IWebBrowser2*    pBrowser2;
    CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);
    if (pBrowser2)
       {
                 VARIANT vEmpty;
                 VariantInit(&vEmpty);
    
                 BSTR bstrURL = SysAllocString(L"http://mail.ru");
    
                 HRESULT hr = pBrowser2->Navigate(bstrURL, &vEmpty, &vEmpty, &vEmpty, &vEmpty);
                 if (SUCCEEDED(hr))
                 {
                     pBrowser2->put_Visible(VARIANT_TRUE);
                 }
                 else
                 {
                    pBrowser2->Quit();
                 }
    SysFreeString(bstrURL);
    }
    
     
  2. maxfax

    maxfax New Member

    Joined:
    23 Jun 2010
    Messages:
    25
    Likes Received:
    0
    Reputations:
    0
    Подскажите хоть в какую сторону копать.
     
  3. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    ТЫЦь
    И
    ТЫЦь

    первое что нашел.
     
  4. maxfax

    maxfax New Member

    Joined:
    23 Jun 2010
    Messages:
    25
    Likes Received:
    0
    Reputations:
    0

    Это называется - "а бы что то ответить".


    нашел пример как можно реализовать через BEGIN_EVENTSINK_MAP

    но тут проблема как только вставляю кусок кода
    Code:
    class Bas{
    	DECLARE_EVENTSINK_MAP()
    	
    	DECLARE_MESSAGE_MAP()
    };
    
    class SimpleBrowser : public Bas {
    public:
    	void _OnDocumentComplete(LPDISPATCH lpDisp,VARIANT *URL);
    	
    	DECLARE_EVENTSINK_MAP()
    	
    	DECLARE_MESSAGE_MAP()
    };
    void SimpleBrowser::_OnDocumentComplete(LPDISPATCH lpDisp,VARIANT *URL)
    {
    	std::cout << "ok!";
    }
    BEGIN_EVENTSINK_MAP(SimpleBrowser,Bas)
       ON_EVENT(SimpleBrowser,AFX_IDW_PANE_FIRST,DISPID_DOCUMENTCOMPLETE,_OnDocumentComplete,VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP();
    
    не получается скомпелить

    Code:
    error LNK2001: неразрешенный внешний символ ""protected: static struct AFX_EVENTSINKMAP const Bas::eventsinkMap" (?eventsinkMap@Bas@@1UAFX_EVENTSINKMAP@@B)"
    
     
  5. maxfax

    maxfax New Member

    Joined:
    23 Jun 2010
    Messages:
    25
    Likes Received:
    0
    Reputations:
    0
    Народ помогите отловить событие с IWebBrowser2, финансово смогу отблагодарить 20$, напишите в личку кто в теме.
     
  6. los8005

    los8005 Member

    Joined:
    28 Sep 2009
    Messages:
    19
    Likes Received:
    5
    Reputations:
    5
    Лучше бы не связывался ты с этим... Просто как то давно ковырял это дело - доков мало по этому OLE объекту. Нормальных нет вобще. В конце забил. Но если тебе IWebBrowser не принципиален, то посмотри на http://www.awesomium.com/. Да, придется за собой кучу таскать, но зато это нормальный двиг от хрома с хоть какой, но докой на плюсах.