实现DWebBrowserEvents2接口使用自定义类CMyWebBrwoser2Event

hbyh 2010-05-13 02:10:04
声明

#include <Exdisp.h>

struct CMyWebBrwoser2Event
: public DWebBrowserEvents2
{

// IUnknown
STDMETHODIMP QueryInterface(REFIID riid,void ** ppvObject);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);

virtual void BeforeNavigate2( IDispatch *pDisp,VARIANT *url,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers,VARIANT_BOOL *Cancel);
virtual void DocumentComplete( IDispatch *pDisp,VARIANT *URL );
virtual void ClientToHostWindow( long *CX,long *CY );
virtual void CommandStateChange( long Command,VARIANT_BOOL Enable );
virtual void DownloadBegin(VOID);
virtual void DownloadComplete(VOID);
virtual void FileDownload(VARIANT_BOOL ActiveDocument,VARIANT_BOOL *Cancel);
virtual void NavigateComplete2(IDispatch *pDisp,VARIANT *URL);
virtual void NavigateError( IDispatch *pDisp,VARIANT *URL,VARIANT *TargetFrameName, VARIANT *StatusCode,VARIANT_BOOL *Cancel);
virtual void NewProcess(long lCauseFlag,IDispatch *pWB2,VARIANT_BOOL *Cancel);
virtual void NewWindow2(IDispatch **ppDisp,VARIANT_BOOL *Cancel);
virtual void NewWindow3(IDispatch **ppDisp,VARIANT_BOOL *Cancel,DWORD dwFlags,BSTR bstrUrlContext,BSTR bstrUrl);
virtual void OnFullScreen(VARIANT_BOOL FullScreen);
virtual void OnMenuBar(VARIANT_BOOL MenuBar);
virtual void OnQuit(VOID);
virtual void OnStatusBar(VARIANT_BOOL StatusBar );
virtual void OnTheaterMode(VARIANT_BOOL TheaterMode);
virtual void OnToolBar(VARIANT_BOOL ToolBar);
virtual void OnVisible(VARIANT_BOOL Visible);
virtual void PrintTemplateInstantiation(IDispatch *pDisp);
virtual void PrintTemplateTeardown(IDispatch *pDisp);
virtual void PrivacyImpactedStateChange(boolean PrivacyImpacted);
virtual void ProgressChange(long Progress,long ProgressMax);
virtual void PropertyChange(BSTR szProperty);
virtual void RedirectXDomainBlocked(IDispatch *pDisp,VARIANT *StartURL,VARIANT *RedirectURL,VARIANT *Frame,VARIANT *StatusCode);
virtual void SetPhishingFilterStatus(long PhishingFilterStatus);
virtual void SetSecureLockIcon(SecureLockIconConstants);//typedef enum SecureLockIconConstants
virtual void StatusTextChange( BSTR Text);
virtual void ThirdPartyUrlBlocked(VARIANT *URL,DWORD dwCount);
virtual void TitleChange(BSTR Text);
virtual void WindowClosing(VARIANT_BOOL IsChildWindow,VARIANT_BOOL *Cancel);
virtual void WindowSetHeight(long Height);
virtual void WindowSetLeft( long Left);
virtual void WindowSetResizable(VARIANT_BOOL Resizable);
virtual void WindowSetTop(long Top);
virtual void WindowSetWidth(long Width);
virtual void WindowStateChanged(DWORD dwFlags, DWORD dwValidFlagsMask);
};


实现

STDMETHODIMP CMyWebBrwoser2Event::QueryInterface(REFIID riid,void ** ppvObject)
{
NOTIMPLEMENTED;
}

STDMETHODIMP_(ULONG) CMyWebBrwoser2Event::AddRef(void)
{
return 1;
}

STDMETHODIMP_(ULONG) CMyWebBrwoser2Event::Release(void)
{
return 1;
}

void CMyWebBrwoser2Event::BeforeNavigate2(IDispatch *pDisp, VARIANT *url, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers, VARIANT_BOOL *Cancel){return;}
void CMyWebBrwoser2Event::DocumentComplete( IDispatch *pDisp,VARIANT *URL ){return;}
void CMyWebBrwoser2Event::ClientToHostWindow( long *CX,long *CY ){return;}
void CMyWebBrwoser2Event::CommandStateChange( long Command,VARIANT_BOOL Enable ){return;}
void CMyWebBrwoser2Event::DownloadBegin(VOID){return;}
void CMyWebBrwoser2Event::DownloadComplete(VOID){return;}
void CMyWebBrwoser2Event::FileDownload(VARIANT_BOOL ActiveDocument,VARIANT_BOOL *Cancel){return;}
void CMyWebBrwoser2Event::NavigateComplete2(IDispatch *pDisp,VARIANT *URL){return;}
void CMyWebBrwoser2Event::NavigateError( IDispatch *pDisp,VARIANT *URL,VARIANT *TargetFrameName, VARIANT *StatusCode,VARIANT_BOOL *Cancel){return;}
void CMyWebBrwoser2Event::NewProcess(long lCauseFlag,IDispatch *pWB2,VARIANT_BOOL *Cancel){return;}
void CMyWebBrwoser2Event::NewWindow2(IDispatch **ppDisp,VARIANT_BOOL *Cancel){return;}
void CMyWebBrwoser2Event::NewWindow3(IDispatch **ppDisp,VARIANT_BOOL *Cancel,DWORD dwFlags,BSTR bstrUrlContext,BSTR bstrUrl){return;}
void CMyWebBrwoser2Event::OnFullScreen(VARIANT_BOOL FullScreen){return;}
void CMyWebBrwoser2Event::OnMenuBar(VARIANT_BOOL MenuBar){return;}
void CMyWebBrwoser2Event::OnQuit(VOID){return;}
void CMyWebBrwoser2Event::OnStatusBar(VARIANT_BOOL StatusBar ){return;}
void CMyWebBrwoser2Event::OnTheaterMode(VARIANT_BOOL TheaterMode){return;}
void CMyWebBrwoser2Event::OnToolBar(VARIANT_BOOL ToolBar){return;}
void CMyWebBrwoser2Event::OnVisible(VARIANT_BOOL Visible){return;}
void CMyWebBrwoser2Event::PrintTemplateInstantiation(IDispatch *pDisp){return;}
void CMyWebBrwoser2Event::PrintTemplateTeardown(IDispatch *pDisp){return;}
void CMyWebBrwoser2Event::PrivacyImpactedStateChange(boolean PrivacyImpacted){return;}
void CMyWebBrwoser2Event::ProgressChange(long Progress,long ProgressMax){return;}
void CMyWebBrwoser2Event::PropertyChange(BSTR szProperty){return;}
void CMyWebBrwoser2Event::RedirectXDomainBlocked(IDispatch *pDisp,VARIANT *StartURL,VARIANT *RedirectURL,VARIANT *Frame,VARIANT *StatusCode){return;}
void CMyWebBrwoser2Event::SetPhishingFilterStatus(long PhishingFilterStatus){return;}
void CMyWebBrwoser2Event::SetSecureLockIcon(SecureLockIconConstants){return;}//typedef enum SecureLockIconConstants
void CMyWebBrwoser2Event::StatusTextChange( BSTR Text){return;}
void CMyWebBrwoser2Event::ThirdPartyUrlBlocked(VARIANT *URL,DWORD dwCount){return;}
void CMyWebBrwoser2Event::TitleChange(BSTR Text){return;}
void CMyWebBrwoser2Event::WindowClosing(VARIANT_BOOL IsChildWindow,VARIANT_BOOL *Cancel){return;}
void CMyWebBrwoser2Event::WindowSetHeight(long Height){return;}
void CMyWebBrwoser2Event::WindowSetLeft( long Left){return;}
void CMyWebBrwoser2Event::WindowSetResizable(VARIANT_BOOL Resizable){return;}
void CMyWebBrwoser2Event::WindowSetTop(long Top){return;}
void CMyWebBrwoser2Event::WindowSetWidth(long Width){return;}
void CMyWebBrwoser2Event::WindowStateChanged(DWORD dwFlags, DWORD dwValidFlagsMask){return;}


然后自定义CMyWebBrwoser2Event brwoser2event;对象时仍然提示
error C2259: “CMyWebBrwoser2Event”: 不能实例化抽象类
...全文
275 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WaistCoat10 2010-05-13
  • 打赏
  • 举报
回复
#include <Exdisp.h>

class CMyWebBrwoser2Event : public DWebBrowserEvents2
{
public: // IDispatch methods
STDMETHOD(QueryInterface)( REFIID riid, void **ppvObject);
{
HRESULT hr = E_NOINTERFACE;
if (riid == __uuidof(IDispatch))
{
*ppvObject = (IDispatch*)this;
AddRef();
hr = S_OK;
}
else if (riid == __uuidof(DWebBrowserEvents2))
{
*ppvObject = (DWebBrowserEvents2*)this;
AddRef();
hr = S_OK;
}

return hr;
}
STDMETHODIMP_(ULONG) AddRef(void)
{
return 1;
};
STDMETHODIMP_(ULONG) Release(void);
{
return 1;
}
STDMETHOD(GetTypeInfoCount)(UINT*)
{
return E_NOTIMPL;
}
STDMETHOD(GetTypeInfo)(UINT, LCID, ITypeInfo**)
{
return E_NOTIMPL;
}

STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR *rgszNames, UINT, LCID, DISPID *rgDispId)
{
return E_NOTIMPL;
}

STDMETHOD(Invoke)(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS FAR* pDispParams,VARIANT FAR* pVarResult,EXCEPINFO FAR* pExcepInfo,unsigned int FAR* puArgErr);
{
HRESULT hr = S_OK;
if(dispIdMember == DISPID_DOCUMENTCOMPLETE)
{
// OnNavigateComplete
}

return hr;
}
};
WaistCoat10 2010-05-13
  • 打赏
  • 举报
回复
DWebBrowserEvents2可以看作为IDispatch接口,得通过Invoke来完成事件的处理
sf_xiaoqiang 2010-05-13
  • 打赏
  • 举报
回复
接分结贴
aa3000 2010-05-13
  • 打赏
  • 举报
回复
接分,呵呵
hbyh 2010-05-13
  • 打赏
  • 举报
回复
// IDispatch Methods
HRESULT _stdcall GetTypeInfoCount(unsigned int * pctinfo);
HRESULT _stdcall GetTypeInfo(unsigned int iTInfo,LCID lcid,ITypeInfo FAR* FAR* ppTInfo);
HRESULT _stdcall GetIDsOfNames(REFIID riid,OLECHAR FAR* FAR* rgszNames,unsigned int cNames,LCID lcid,DISPID FAR* rgDispId);
HRESULT _stdcall Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS FAR* pDispParams,VARIANT FAR* pVarResult,EXCEPINFO FAR* pExcepInfo,unsigned int FAR* puArgErr);


原来还需要再实现这几个方法

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧