123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #ifndef __UIWEBBROWSER_H__
- #define __UIWEBBROWSER_H__
- #pragma once
- #include <MsHTML.h>
- #include "Utils/WebBrowserEventHandler.h"
- #include <ExDisp.h>
- 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__
|