我想接管 WebBrowser 控件的一些动作,已经用一个组件实现了 IDocHostUIHandler 和IDocHostShowUI 接口,怎样才能把我的组件和 WebBrowser 控件关联起来呢?
---------
在例子程序中我看到了 IOleObject 接口,是否和它有关系呢?

解决方案 »

  1.   

    这是Borland C++Builder的代码,CHtmlView应该可以采用类似的方法。=======================================class TDocHostUIHandlerImpl : public IDocHostUIHandler
    {
    ............
    };
      TDocHostUIHandlerImpl *FDocHostUIHandler;  FDocHostUIHandler = new TDocHostUIHandlerImpl();
     
      //==================  CppWebBrowser1->Navigate(L"about:blank");  while(CppWebBrowser1->Document == NULL)
      {
        Sleep(10);
        Application->ProcessMessages();
      }  // 传递接口指针到IHTMLDocument2  ICustomDoc *m_spCustDoc;
      HRESULT hr;  hr = CppWebBrowser1->Document->QueryInterface(IID_ICustomDoc,(void**)&m_spCustDoc);
      if(SUCCEEDED(hr))
      {
        hr = m_spCustDoc->SetUIHandler(FDocHostUIHandler);
        if(hr != S_OK)
        {
          MessageBox(NULL,AnsiString(AnsiString("Can not bind IDocHostUIHandler instance to ") +
                     "IHTMLDocument2.Err = " + SysErrorMessage(hr)).c_str(),
                     NULL,MB_OK | MB_APPLMODAL | MB_ICONWARNING);
        }
        else
        {
          MessageBox(NULL,"Succeeded",NULL,MB_OK | MB_APPLMODAL | MB_ICONWARNING);
        }    m_spCustDoc->Release();
      }
      

  2.   

    能在VC版看到BCB_FANS大哥真高兴.
      

  3.   

    TO : RomanticProgrammer(兰企鹅||南极俺最帅):)
      

  4.   

    用 ICustomDoc 确实可以,Microsoft 的例子中的代码好像没有使用这个接口也实现了我需要的功能。Microsoft 的例子中代码
    http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/browser/atlbrowser/Default.asp
      

  5.   

    搞定了
    ---------------------
    方法一:
    BCB_FANS(四大名捕之追杀令) 提供的方法,用 ICustomDoc 接口。方法二:
    对象同时还要实现 IOleClientSite,把对象作为 WebBrowser 的宿主,WebBrowser 会查询宿主的 IDocHostUIHandler & IDocHostShowUI 接口