定制浏览器
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;
}
结束时,断开与浏览器的连接
- ››浏览器Cookie:一半广告 一半隐私
- ››浏览器Skyfire将推出iPad版,支持Flash
- ››浏览器中的内存泄露(重新整理ing)
- ››浏览器已经去过多少个网站
- ››定制个性化的对话框窗口类
- ››定制 SWT/RCP 界面:如何编写一个漂亮的 SWT/RCP ...
- ››定制基于 Visual studio 2005 平台 Windows CE(AR...
- ››定制版黑雨 blackra1n 越狱3.1.2 全系 iPhone
- ››定制 Eclipse RCP 应用程序,第 1 部分: 可与 SWT...
- ››浏览器资源占用高另有他因
- ››浏览器更新驱动 驱动精灵在线版登场
- ››定制AIX操作系统的shell环境
更多精彩
赞助商链接