WEB开发网
开发学院软件开发VC 定制浏览器 阅读

定制浏览器

 2006-07-22 22:02:45 来源:WEB开发网   
核心提示: (无需:BEGIN_INTERFACE_MAP、END_INTERFACE_MAP)这是一个以分发接口(IDispatch)作为出接口的典型例子,在接口函数的实现中,定制浏览器(2),Invoke负责又分发ID调用不同的虚拟函数,(事件函数作为虚拟函数,供派生类重载)STDMETHODIM

(无需:BEGIN_INTERFACE_MAP、END_INTERFACE_MAP)

这是一个以分发接口(IDispatch)作为出接口的典型例子。在接口函数的实现中。Invoke负责又分发ID调用不同的虚拟函数。(事件函数作为虚拟函数,供派生类重载)

STDMETHODIMP CFMDBrowser::XBrowserEventSink::Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,
         WORD wFlags,DISPPARAMS *pDispParams,
         VARIANT *pVarResult,EXCEPINFO *pExcepInfo,
         UINT *puArgErr)
{
  METHOD_PROLOGUE(CFMDBrowser,BrowserEventSink)
  //将事件分发到各虚拟函数
  //分发ID的定义见 exdispid.h
  switch(dispIdMember)
  {
  case DISPID_BEFORENAVIGATE:
    ...
    HRESULT hr=pThis->OnBeforeNavigate(..) //事件对应的虚拟函数
    ...
    break;
    case DISPID_NAVIGATECOMPLETE:
        ...
  case ...
  case ...
}

建立与浏览器的连接

得到IConnectionPointContainer接口,查找与DIID_DWebBrowserEvents对应的接收器,建立连接,记录连接的标号(m_dwEventSinkCookie);

BOOL CFMDBrowser::Connect()
{
  IUnknown *p_Unk=GetControlUnknown();
  if(p_Unk==NULL)
    return FALSE;
  BOOL bOK=FALSE;
  //查找连接点对象
  IConnectionPointContainer *i_cpc=0;
  HRESULT hr=p_Unk->QueryInterface(IID_IConnectionPointContainer,
    (void **)(&i_cpc));
  if (SUCCEEDED(hr))
  {
    IConnectionPoint *i_cp=0;
    hr=i_cpc->FindConnectionPoint(DIID_DWebBrowserEvents,&i_cp);
    if (SUCCEEDED(hr))
    {
      hr=i_cp->Advise(&m_xBrowserEventSink,&m_dwEventSinkCookie);
      i_cp->Release();
      bOK=TRUE;
    }
    i_cpc->Release();
  }
  
  return bOK;
}

结束时,断开与浏览器的连接

Tags:定制 浏览器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接