UIWebBrowser.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #ifndef __UIWEBBROWSER_H__
  2. #define __UIWEBBROWSER_H__
  3. #pragma once
  4. #include "Utils/WebBrowserEventHandler.h"
  5. #include <ExDisp.h>
  6. namespace DuiLib
  7. {
  8. class UILIB_API CWebBrowserUI
  9. : public CActiveXUI
  10. , public IDocHostUIHandler
  11. , public IServiceProvider
  12. , public IOleCommandTarget
  13. , public IDispatch
  14. , public ITranslateAccelerator
  15. {
  16. public:
  17. /// 构造函数
  18. CWebBrowserUI();
  19. virtual ~CWebBrowserUI();
  20. void SetHomePage(LPCTSTR lpszUrl);
  21. LPCTSTR GetHomePage();
  22. void SetAutoNavigation(bool bAuto = TRUE);
  23. bool IsAutoNavigation();
  24. void SetWebBrowserEventHandler(CWebBrowserEventHandler* pEventHandler);
  25. void Navigate2(LPCTSTR lpszUrl);
  26. void Refresh();
  27. void Refresh2(int Level);
  28. void GoBack();
  29. void GoForward();
  30. void NavigateHomePage();
  31. void NavigateUrl(LPCTSTR lpszUrl);
  32. virtual bool DoCreateControl();
  33. IWebBrowser2* GetWebBrowser2(void);
  34. IDispatch* GetHtmlWindow();
  35. static DISPID FindId(IDispatch *pObj, LPOLESTR pName);
  36. static HRESULT InvokeMethod(IDispatch *pObj, LPOLESTR pMehtod, VARIANT *pVarResult, VARIANT *ps, int cArgs);
  37. static HRESULT GetProperty(IDispatch *pObj, LPOLESTR pName, VARIANT *pValue);
  38. static HRESULT SetProperty(IDispatch *pObj, LPOLESTR pName, VARIANT *pValue);
  39. protected:
  40. IWebBrowser2* m_pWebBrowser2; //浏览器指针
  41. IHTMLWindow2* _pHtmlWnd2;
  42. LONG m_dwRef;
  43. DWORD m_dwCookie;
  44. virtual void ReleaseControl();
  45. HRESULT RegisterEventHandler(BOOL inAdvise);
  46. virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
  47. CDuiString m_sHomePage; // 默认页面
  48. bool m_bAutoNavi; // 是否启动时打开默认页面
  49. CWebBrowserEventHandler* m_pWebBrowserEventHandler; //浏览器事件处理
  50. // DWebBrowserEvents2
  51. void BeforeNavigate2( IDispatch *pDisp,VARIANT *&url,VARIANT *&Flags,VARIANT *&TargetFrameName,VARIANT *&PostData,VARIANT *&Headers,VARIANT_BOOL *&Cancel );
  52. void NavigateError(IDispatch *pDisp,VARIANT * &url,VARIANT *&TargetFrameName,VARIANT *&StatusCode,VARIANT_BOOL *&Cancel);
  53. void NavigateComplete2(IDispatch *pDisp,VARIANT *&url);
  54. void DocumentComplete(IDispatch *pDisp,VARIANT *&url);
  55. void ProgressChange(LONG nProgress, LONG nProgressMax);
  56. void NewWindow3(IDispatch **pDisp, VARIANT_BOOL *&Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl);
  57. void CommandStateChange(long Command,VARIANT_BOOL Enable);
  58. public:
  59. virtual LPCTSTR GetClass() const;
  60. virtual LPVOID GetInterface( LPCTSTR pstrName );
  61. // IUnknown
  62. STDMETHOD_(ULONG,AddRef)();
  63. STDMETHOD_(ULONG,Release)();
  64. STDMETHOD(QueryInterface)(REFIID riid, LPVOID *ppvObject);
  65. // IDispatch
  66. virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( __RPC__out UINT *pctinfo );
  67. virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( UINT iTInfo, LCID lcid, __RPC__deref_out_opt ITypeInfo **ppTInfo );
  68. 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);
  69. virtual HRESULT STDMETHODCALLTYPE Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr );
  70. // IDocHostUIHandler
  71. STDMETHOD(ShowContextMenu)(DWORD dwID, POINT* pptPosition, IUnknown* pCommandTarget, IDispatch* pDispatchObjectHit);
  72. STDMETHOD(GetHostInfo)(DOCHOSTUIINFO* pInfo);
  73. STDMETHOD(ShowUI)(DWORD dwID, IOleInPlaceActiveObject* pActiveObject, IOleCommandTarget* pCommandTarget, IOleInPlaceFrame* pFrame, IOleInPlaceUIWindow* pDoc);
  74. STDMETHOD(HideUI)();
  75. STDMETHOD(UpdateUI)();
  76. STDMETHOD(EnableModeless)(BOOL fEnable);
  77. STDMETHOD(OnDocWindowActivate)(BOOL fActivate);
  78. STDMETHOD(OnFrameWindowActivate)(BOOL fActivate);
  79. STDMETHOD(ResizeBorder)(LPCRECT prcBorder, IOleInPlaceUIWindow* pUIWindow, BOOL fFrameWindow);
  80. STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID); //浏览器消息过滤
  81. STDMETHOD(GetOptionKeyPath)(LPOLESTR* pchKey, DWORD dwReserved);
  82. STDMETHOD(GetDropTarget)(IDropTarget* pDropTarget, IDropTarget** ppDropTarget);
  83. STDMETHOD(GetExternal)(IDispatch** ppDispatch);
  84. STDMETHOD(TranslateUrl)(DWORD dwTranslate, OLECHAR* pchURLIn, OLECHAR** ppchURLOut);
  85. STDMETHOD(FilterDataObject)(IDataObject* pDO, IDataObject** ppDORet);
  86. // IServiceProvider
  87. STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void** ppvObject);
  88. // IOleCommandTarget
  89. virtual HRESULT STDMETHODCALLTYPE QueryStatus( __RPC__in_opt const GUID *pguidCmdGroup, ULONG cCmds, __RPC__inout_ecount_full(cCmds ) OLECMD prgCmds[ ], __RPC__inout_opt OLECMDTEXT *pCmdText);
  90. virtual HRESULT STDMETHODCALLTYPE Exec( __RPC__in_opt const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, __RPC__in_opt VARIANT *pvaIn, __RPC__inout_opt VARIANT *pvaOut );
  91. // IDownloadManager
  92. STDMETHOD(Download)(
  93. /* [in] */ IMoniker *pmk,
  94. /* [in] */ IBindCtx *pbc,
  95. /* [in] */ DWORD dwBindVerb,
  96. /* [in] */ LONG grfBINDF,
  97. /* [in] */ BINDINFO *pBindInfo,
  98. /* [in] */ LPCOLESTR pszHeaders,
  99. /* [in] */ LPCOLESTR pszRedir,
  100. /* [in] */ UINT uiCP);
  101. // ITranslateAccelerator
  102. // Duilib消息分发给WebBrowser
  103. virtual LRESULT TranslateAccelerator( MSG *pMsg );
  104. };
  105. } // namespace DuiLib
  106. #endif // __UIWEBBROWSER_H__