Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

345 lines
9.9 KiB

  1. // Copyright (C) Microsoft Corporation 1996-1997, All Rights reserved.
  2. #if _MSC_VER > 1000
  3. #pragma once
  4. #endif
  5. #ifndef _CONTAIN_H_
  6. #define _CONTAIN_H_
  7. #include <servprov.h>
  8. #include <docobj.h>
  9. #ifndef INITGUIDS
  10. #include <olectl.h>
  11. #endif
  12. #include "web.h"
  13. #include "mshtmhst.h"
  14. extern IServiceProvider *g_pExternalHostServiceProvider;
  15. typedef class CIPropertyNotifySink *PIPROPERTYNOTIFYSINK;
  16. typedef class CIOleControlSite *PIOLECONTROLSITE;
  17. class CAutomateContent;
  18. class CDocHostUIHandler : public IDocHostUIHandler
  19. {
  20. private:
  21. ULONG m_cRef;
  22. public:
  23. IUnknown * m_pOuter;
  24. CDocHostUIHandler(IUnknown * pOuter);
  25. STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppv);
  26. STDMETHODIMP_(ULONG) AddRef(void);
  27. STDMETHODIMP_(ULONG) Release(void);
  28. STDMETHODIMP ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved);
  29. STDMETHODIMP GetHostInfo(DOCHOSTUIINFO *pInfo);
  30. STDMETHODIMP ShowUI(DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget,
  31. IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc);
  32. STDMETHODIMP HideUI(void);
  33. STDMETHODIMP UpdateUI(void);
  34. STDMETHODIMP EnableModeless(BOOL fEnable);
  35. STDMETHODIMP OnDocWindowActivate(BOOL fActivate);
  36. STDMETHODIMP OnFrameWindowActivate(BOOL fActivate);
  37. STDMETHODIMP ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow);
  38. STDMETHODIMP TranslateAccelerator(LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID);
  39. STDMETHODIMP GetOptionKeyPath(LPOLESTR *pchKey, DWORD dw);
  40. STDMETHODIMP GetDropTarget(IDropTarget *pDropTarget, IDropTarget **ppDropTarget);
  41. STDMETHODIMP GetExternal(IDispatch **ppDispatch);
  42. STDMETHODIMP TranslateUrl(DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut);
  43. STDMETHODIMP FilterDataObject(IDataObject *pDO, IDataObject **ppDORet);
  44. };
  45. class CDocHostShowUI : public IDocHostShowUI
  46. {
  47. private:
  48. ULONG m_cRef;
  49. public:
  50. IUnknown * m_pOuter;
  51. CDocHostShowUI(IUnknown * pOuter);
  52. STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppv);
  53. STDMETHODIMP_(ULONG) AddRef(void);
  54. STDMETHODIMP_(ULONG) Release(void);
  55. STDMETHODIMP ShowHelp( HWND hwnd, LPOLESTR pszHelpFile, UINT uCommand, DWORD dwData, POINT ptMouse, IDispatch* pDispatchObjectHit );
  56. STDMETHODIMP ShowMessage( HWND hwnd, LPOLESTR lpstrText, LPOLESTR lpstrCaption, DWORD dwType, LPOLESTR lpstrHelpFile, DWORD dwHelpContext, LRESULT* plResult );
  57. };
  58. class CIOleItemContainer : public IOleItemContainer
  59. {
  60. private:
  61. ULONG m_cRef;
  62. public:
  63. IUnknown * m_pOuter;
  64. CIOleItemContainer(IUnknown *);
  65. STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  66. STDMETHODIMP_(ULONG) AddRef(void);
  67. STDMETHODIMP_(ULONG) Release(void);
  68. STDMETHODIMP ParseDisplayName(IBindCtx*,LPOLESTR,ULONG*,IMoniker**);
  69. STDMETHODIMP EnumObjects(DWORD,LPENUMUNKNOWN*);
  70. STDMETHODIMP LockContainer(BOOL);
  71. STDMETHODIMP GetObject(LPOLESTR,DWORD,IBindCtx*,REFIID,void**);
  72. STDMETHODIMP GetObjectStorage(LPOLESTR,IBindCtx*,REFIID,void**);
  73. STDMETHODIMP IsRunning(LPOLESTR);
  74. };
  75. class CIOleClientSite : public IOleClientSite
  76. {
  77. protected:
  78. ULONG m_cRef;
  79. class CContainer *m_pContainer;
  80. LPUNKNOWN m_pUnkOuter;
  81. public:
  82. CIOleClientSite(class CContainer *);
  83. ~CIOleClientSite(void);
  84. STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  85. STDMETHODIMP_(ULONG) AddRef(void);
  86. STDMETHODIMP_(ULONG) Release(void);
  87. STDMETHODIMP SaveObject(void);
  88. STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
  89. STDMETHODIMP GetContainer(LPOLECONTAINER *);
  90. STDMETHODIMP ShowObject(void);
  91. STDMETHODIMP OnShowWindow(BOOL);
  92. STDMETHODIMP RequestNewObjectLayout(void);
  93. };
  94. typedef CIOleClientSite *PIOLECLIENTSITE;
  95. class CIAdviseSink : public IAdviseSink2
  96. {
  97. protected:
  98. ULONG m_cRef;
  99. class CContainer *m_pContainer;
  100. LPUNKNOWN m_pUnkOuter;
  101. public:
  102. CIAdviseSink(class CContainer *);
  103. ~CIAdviseSink(void);
  104. STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  105. STDMETHODIMP_(ULONG) AddRef(void);
  106. STDMETHODIMP_(ULONG) Release(void);
  107. STDMETHODIMP_(void) OnDataChange(LPFORMATETC, LPSTGMEDIUM);
  108. STDMETHODIMP_(void) OnViewChange(DWORD, LONG);
  109. STDMETHODIMP_(void) OnRename(LPMONIKER);
  110. STDMETHODIMP_(void) OnSave(void);
  111. STDMETHODIMP_(void) OnClose(void);
  112. STDMETHODIMP_(void) OnLinkSrcChange(LPMONIKER);
  113. };
  114. typedef CIAdviseSink *PIADVISESINK;
  115. class CIOleInPlaceSite : public IOleInPlaceSite
  116. {
  117. protected:
  118. ULONG m_cRef;
  119. class CContainer *m_pContainer;
  120. public:
  121. LPUNKNOWN m_pUnkOuter;
  122. CIOleInPlaceSite(class CContainer *);
  123. ~CIOleInPlaceSite(void);
  124. STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  125. STDMETHODIMP_(ULONG) AddRef(void);
  126. STDMETHODIMP_(ULONG) Release(void);
  127. STDMETHODIMP GetWindow(HWND *);
  128. STDMETHODIMP ContextSensitiveHelp(BOOL);
  129. STDMETHODIMP CanInPlaceActivate(void);
  130. STDMETHODIMP OnInPlaceActivate(void);
  131. STDMETHODIMP OnUIActivate(void);
  132. STDMETHODIMP GetWindowContext(LPOLEINPLACEFRAME *
  133. , LPOLEINPLACEUIWINDOW *, LPRECT, LPRECT
  134. , LPOLEINPLACEFRAMEINFO);
  135. STDMETHODIMP Scroll(SIZE);
  136. STDMETHODIMP OnUIDeactivate(BOOL);
  137. STDMETHODIMP OnInPlaceDeactivate(void);
  138. STDMETHODIMP DiscardUndoState(void);
  139. STDMETHODIMP DeactivateAndUndo(void);
  140. STDMETHODIMP OnPosRectChange(LPCRECT);
  141. };
  142. typedef CIOleInPlaceSite *PIOLEINPLACESITE;
  143. class CIOleInPlaceFrame : public IOleInPlaceFrame
  144. {
  145. protected:
  146. ULONG m_cRef;
  147. class CContainer *m_pContainer;
  148. public:
  149. LPUNKNOWN m_pUnkOuter;
  150. CIOleInPlaceFrame(class CContainer *);
  151. ~CIOleInPlaceFrame(void);
  152. STDMETHODIMP QueryInterface (REFIID riid, LPVOID FAR* ppv);
  153. STDMETHODIMP_(ULONG) AddRef ();
  154. STDMETHODIMP_(ULONG) Release ();
  155. STDMETHODIMP GetWindow (HWND FAR* lphwnd);
  156. STDMETHODIMP ContextSensitiveHelp (BOOL fEnterMode);
  157. // *** IOleInPlaceUIWindow methods ***
  158. STDMETHODIMP GetBorder (LPRECT lprectBorder);
  159. STDMETHODIMP RequestBorderSpace (LPCBORDERWIDTHS lpborderwidths);
  160. STDMETHODIMP SetBorderSpace (LPCBORDERWIDTHS lpborderwidths);
  161. //@@WTK WIN32, UNICODE
  162. //STDMETHODIMP SetActiveObject (LPOLEINPLACEACTIVEOBJECT lpActiveObject,LPCSTR lpszObjName);
  163. STDMETHODIMP SetActiveObject (LPOLEINPLACEACTIVEOBJECT lpActiveObject,LPCOLESTR lpszObjName);
  164. // *** IOleInPlaceFrame methods ***
  165. STDMETHODIMP InsertMenus (HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths);
  166. STDMETHODIMP SetMenu (HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject);
  167. STDMETHODIMP RemoveMenus (HMENU hmenuShared);
  168. //@@WTK WIN32, UNICODE
  169. //STDMETHODIMP SetStatusText (LPCSTR lpszStatusText);
  170. STDMETHODIMP SetStatusText (LPCOLESTR lpszStatusText);
  171. STDMETHODIMP EnableModeless (BOOL fEnable);
  172. STDMETHODIMP TranslateAccelerator (LPMSG lpmsg, WORD wID);
  173. };
  174. class CIOleControlSite : public IOleControlSite
  175. {
  176. protected:
  177. ULONG m_cRef;
  178. class CContainer* m_pContainer;
  179. LPUNKNOWN m_pUnkOuter;
  180. public:
  181. CIOleControlSite(class CContainer *);
  182. ~CIOleControlSite(void);
  183. STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  184. STDMETHODIMP_(ULONG) AddRef(void);
  185. STDMETHODIMP_(ULONG) Release(void);
  186. STDMETHODIMP OnControlInfoChanged(void);
  187. STDMETHODIMP LockInPlaceActive(BOOL);
  188. STDMETHODIMP GetExtendedControl(LPDISPATCH *);
  189. STDMETHODIMP TransformCoords(POINTL *, POINTF *, DWORD);
  190. STDMETHODIMP TranslateAccelerator(LPMSG, DWORD);
  191. STDMETHODIMP OnFocus(BOOL);
  192. STDMETHODIMP ShowPropertyFrame(void);
  193. };
  194. typedef CIOleInPlaceFrame *PIOLEINPLACEFRAME;
  195. /***************************************************************************/
  196. class CContainer : public IServiceProvider
  197. {
  198. friend CIOleClientSite;
  199. friend CIAdviseSink;
  200. friend CIOleInPlaceSite;
  201. friend CIOleInPlaceFrame;
  202. //CONTROLMOD
  203. // friend CIOleControlSite;
  204. // friend CIPropertyNotifySink;
  205. //End CONTROLMOD
  206. public:
  207. BOOL m_OleInited;
  208. ULONG m_cRef;
  209. IStorage* m_pIStorage;
  210. LPOLEOBJECT m_pOleObject;
  211. HWND m_hWnd;
  212. BOOL m_bIE4;
  213. //Our interfaces
  214. PIADVISESINK m_pIAdviseSink;
  215. PIOLEINPLACESITE m_pIOleInPlaceSite;
  216. PIOLECLIENTSITE m_pIOleClientSite;
  217. PIOLEINPLACEFRAME m_pIOleInPlaceFrame;
  218. CIOleItemContainer * m_pIOleItemContainer;
  219. CAutomateContent * m_pIDispatch;
  220. PIOLECONTROLSITE m_pIOleControlSite;
  221. // CHtmlHelpCallback * m_pCallback;
  222. IDocHostUIHandler* m_pCDocHostUIHandler;
  223. IDocHostShowUI* m_pCDocHostShowUI;
  224. IOleInPlaceActiveObject *m_pInPlaceActive;
  225. DWORD m_dwEventCookie;
  226. public:
  227. CContainer();
  228. ~CContainer(void);
  229. HRESULT ShutDown(void);
  230. class IWebBrowserImpl* m_pWebBrowser;
  231. class IWebBrowserAppImpl* m_pWebBrowserApp;
  232. class DWebBrowserEventsImpl* m_pWebBrowserEvents;
  233. LPOLECOMMANDTARGET m_pIE3CmdTarget;
  234. void UIDeactivateIE();
  235. HRESULT Create(HWND hWnd, LPRECT lpRect, BOOL bInstallEventSink = TRUE);
  236. void SetFocus(BOOL bForceActivation = FALSE);
  237. void SizeIt(int width, int height);
  238. LRESULT ForwardMessage(UINT msg, WPARAM wParam, LPARAM lParam);
  239. unsigned TranslateMessage(MSG * pMsg);
  240. BOOL IsUIActive(void) { return m_pInPlaceActive != NULL; }
  241. HWND m_hwndChild;
  242. // IUnknown
  243. //
  244. STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  245. STDMETHODIMP_(ULONG) AddRef(void);
  246. STDMETHODIMP_(ULONG) Release(void);
  247. // IServiceProvider
  248. STDMETHOD(QueryService)(REFGUID, REFIID, LPVOID *);
  249. #ifdef _DEBUG
  250. BOOL m_fDeleting;
  251. #endif
  252. };
  253. typedef CContainer *PCONTAINER;
  254. #if 0
  255. class CIPropertyNotifySink : public IPropertyNotifySink
  256. {
  257. protected:
  258. ULONG m_cRef;
  259. class CContainer *m_pContainer;
  260. LPUNKNOWN m_pUnkOuter;
  261. public:
  262. CIPropertyNotifySink(class CContainer *, LPUNKNOWN);
  263. ~CIPropertyNotifySink(void);
  264. STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  265. STDMETHODIMP_(ULONG) AddRef(void);
  266. STDMETHODIMP_(ULONG) Release(void);
  267. STDMETHODIMP OnChanged(DISPID);
  268. STDMETHODIMP OnRequestEdit(DISPID);
  269. };
  270. #endif
  271. #endif //_CONTAIN_H_