#ifndef __UIWEBBROWSER_H__ #define __UIWEBBROWSER_H__ #pragma once #include #include "Utils/WebBrowserEventHandler.h" #include namespace DuiLib { class UILIB_API CWebBrowserUI : public CActiveXUI , public IDocHostUIHandler , public IServiceProvider , public IOleCommandTarget , public IDispatch , public ITranslateAccelerator , public IInternetSecurityManager { DECLARE_DUICONTROL(CWebBrowserUI) public: /// 构造函数 CWebBrowserUI(); virtual ~CWebBrowserUI(); void SetHomePage(LPCTSTR lpszUrl); LPCTSTR GetHomePage(); void SetAutoNavigation(bool bAuto = TRUE); bool IsAutoNavigation(); void SetWebBrowserEventHandler(CWebBrowserEventHandler* pEventHandler); void Navigate2(LPCTSTR lpszUrl); void Refresh(); void Refresh2(int Level); void GoBack(); void GoForward(); void NavigateHomePage(); void NavigateUrl(LPCTSTR lpszUrl); virtual bool DoCreateControl(); IWebBrowser2* GetWebBrowser2(void); IDispatch* GetHtmlWindow(); static DISPID FindId(IDispatch *pObj, LPOLESTR pName); static HRESULT InvokeMethod(IDispatch *pObj, LPOLESTR pMehtod, VARIANT *pVarResult, VARIANT *ps, int cArgs); static HRESULT GetProperty(IDispatch *pObj, LPOLESTR pName, VARIANT *pValue); static HRESULT SetProperty(IDispatch *pObj, LPOLESTR pName, VARIANT *pValue); protected: IWebBrowser2* m_pWebBrowser2; //浏览器指针 IHTMLWindow2* _pHtmlWnd2; LONG m_dwRef; DWORD m_dwCookie; virtual void ReleaseControl(); HRESULT RegisterEventHandler(BOOL inAdvise); virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue); CDuiString m_sHomePage; // 默认页面 bool m_bAutoNavi; // 是否启动时打开默认页面 CWebBrowserEventHandler* m_pWebBrowserEventHandler; //浏览器事件处理 // DWebBrowserEvents2 void BeforeNavigate2( IDispatch *pDisp,VARIANT *&url,VARIANT *&Flags,VARIANT *&TargetFrameName,VARIANT *&PostData,VARIANT *&Headers,VARIANT_BOOL *&Cancel ); void NavigateError(IDispatch *pDisp,VARIANT * &url,VARIANT *&TargetFrameName,VARIANT *&StatusCode,VARIANT_BOOL *&Cancel); void NavigateComplete2(IDispatch *pDisp,VARIANT *&url); void ProgressChange(LONG nProgress, LONG nProgressMax); void NewWindow3(IDispatch **pDisp, VARIANT_BOOL *&Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl); void CommandStateChange(long Command,VARIANT_BOOL Enable); void TitleChange(BSTR bstrTitle); void DocumentComplete(IDispatch *pDisp,VARIANT *&url); public: virtual LPCTSTR GetClass() const; virtual LPVOID GetInterface( LPCTSTR pstrName ); // IUnknown STDMETHOD_(ULONG,AddRef)(); STDMETHOD_(ULONG,Release)(); STDMETHOD(QueryInterface)(REFIID riid, LPVOID *ppvObject); // IDispatch virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( __RPC__out UINT *pctinfo ); virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( UINT iTInfo, LCID lcid, __RPC__deref_out_opt ITypeInfo **ppTInfo ); virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames( __RPC__in REFIID riid, __RPC__in_ecount_full(cNames ) LPOLESTR *rgszNames, UINT cNames, LCID lcid, __RPC__out_ecount_full(cNames) DISPID *rgDispId); virtual HRESULT STDMETHODCALLTYPE Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr ); // IDocHostUIHandler STDMETHOD(ShowContextMenu)(DWORD dwID, POINT* pptPosition, IUnknown* pCommandTarget, IDispatch* pDispatchObjectHit); STDMETHOD(GetHostInfo)(DOCHOSTUIINFO* pInfo); STDMETHOD(ShowUI)(DWORD dwID, IOleInPlaceActiveObject* pActiveObject, IOleCommandTarget* pCommandTarget, IOleInPlaceFrame* pFrame, IOleInPlaceUIWindow* pDoc); STDMETHOD(HideUI)(); STDMETHOD(UpdateUI)(); STDMETHOD(EnableModeless)(BOOL fEnable); STDMETHOD(OnDocWindowActivate)(BOOL fActivate); STDMETHOD(OnFrameWindowActivate)(BOOL fActivate); STDMETHOD(ResizeBorder)(LPCRECT prcBorder, IOleInPlaceUIWindow* pUIWindow, BOOL fFrameWindow); STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID); //浏览器消息过滤 STDMETHOD(GetOptionKeyPath)(LPOLESTR* pchKey, DWORD dwReserved); STDMETHOD(GetDropTarget)(IDropTarget* pDropTarget, IDropTarget** ppDropTarget); STDMETHOD(GetExternal)(IDispatch** ppDispatch); STDMETHOD(TranslateUrl)(DWORD dwTranslate, OLECHAR* pchURLIn, OLECHAR** ppchURLOut); STDMETHOD(FilterDataObject)(IDataObject* pDO, IDataObject** ppDORet); // IServiceProvider STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void** ppvObject); // IOleCommandTarget virtual HRESULT STDMETHODCALLTYPE QueryStatus( __RPC__in_opt const GUID *pguidCmdGroup, ULONG cCmds, __RPC__inout_ecount_full(cCmds ) OLECMD prgCmds[ ], __RPC__inout_opt OLECMDTEXT *pCmdText); virtual HRESULT STDMETHODCALLTYPE Exec( __RPC__in_opt const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, __RPC__in_opt VARIANT *pvaIn, __RPC__inout_opt VARIANT *pvaOut ); // IDownloadManager STDMETHOD(Download)( /* [in] */ IMoniker *pmk, /* [in] */ IBindCtx *pbc, /* [in] */ DWORD dwBindVerb, /* [in] */ LONG grfBINDF, /* [in] */ BINDINFO *pBindInfo, /* [in] */ LPCOLESTR pszHeaders, /* [in] */ LPCOLESTR pszRedir, /* [in] */ UINT uiCP); virtual HRESULT STDMETHODCALLTYPE SetSecuritySite( /* [unique][in] */ __RPC__in_opt IInternetSecurityMgrSite *pSite){return S_OK;} virtual HRESULT STDMETHODCALLTYPE GetSecuritySite( /* [out] */ __RPC__deref_out_opt IInternetSecurityMgrSite **ppSite){return S_OK;} virtual HRESULT STDMETHODCALLTYPE MapUrlToZone( /* [in] */ __RPC__in LPCWSTR pwszUrl, /* [out] */ __RPC__out DWORD *pdwZone, /* [in] */ DWORD dwFlags) {return S_OK;} virtual HRESULT STDMETHODCALLTYPE GetSecurityId( /* [in] */ __RPC__in LPCWSTR pwszUrl, /* [size_is][out] */ __RPC__out_ecount_full(*pcbSecurityId) BYTE *pbSecurityId, /* [out][in] */ __RPC__inout DWORD *pcbSecurityId, /* [in] */ DWORD_PTR dwReserved) {return S_OK;} virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction( /* [in] */ __RPC__in LPCWSTR pwszUrl, /* [in] */ DWORD dwAction, /* [size_is][out] */ __RPC__out_ecount_full(cbPolicy) BYTE *pPolicy, /* [in] */ DWORD cbPolicy, /* [unique][in] */ __RPC__in_opt BYTE *pContext, /* [in] */ DWORD cbContext, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwReserved) { return S_OK; } virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy( /* [in] */ __RPC__in LPCWSTR pwszUrl, /* [in] */ __RPC__in REFGUID guidKey, /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcbPolicy) BYTE **ppPolicy, /* [out] */ __RPC__out DWORD *pcbPolicy, /* [in] */ __RPC__in BYTE *pContext, /* [in] */ DWORD cbContext, /* [in] */ DWORD dwReserved) {return S_OK;} virtual HRESULT STDMETHODCALLTYPE SetZoneMapping( /* [in] */ DWORD dwZone, /* [in] */ __RPC__in LPCWSTR lpszPattern, /* [in] */ DWORD dwFlags) {return S_OK;} virtual HRESULT STDMETHODCALLTYPE GetZoneMappings( /* [in] */ DWORD dwZone, /* [out] */ __RPC__deref_out_opt IEnumString **ppenumString, /* [in] */ DWORD dwFlags) {return S_OK;} // ITranslateAccelerator // Duilib消息分发给WebBrowser virtual LRESULT TranslateAccelerator( MSG *pMsg ); }; } // namespace DuiLib #endif // __UIWEBBROWSER_H__