IOCS.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:9k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //**********************************************************************
  2. // File name: IOCS.CPP
  3. //
  4. //      Implementation file for COleClientSite
  5. //
  6. // Functions:
  7. //
  8. //      See IOCS.H for class definition
  9. //
  10. // Copyright (c) 1992 - 1997 Microsoft Corporation. All rights reserved.
  11. //**********************************************************************
  12. #include "pre.h"
  13. #include "iocs.h"
  14. #include "ias.h"
  15. #include "ioipf.h"
  16. #include "ioips.h"
  17. #include "app.h"
  18. #include "site.h"
  19. #include "doc.h"
  20. //**********************************************************************
  21. //
  22. // COleClientSite::QueryInterface
  23. //
  24. // Purpose:
  25. //
  26. //      Used for interface negotiation at this interface
  27. //
  28. // Parameters:
  29. //
  30. //      REFIID riid         -   A reference to the interface that is
  31. //                              being queried.
  32. //
  33. //      LPVOID FAR* ppvObj  -   An out parameter to return a pointer to
  34. //                              the interface.
  35. //
  36. // Return Value:
  37. //
  38. //      S_OK                -   The interface is supported.
  39. //      E_NOINTERFACE       -   The interface is not supported
  40. //
  41. // Function Calls:
  42. //      Function                    Location
  43. //
  44. //      OutputDebugString           Windows API
  45. //      CSimpleSite::QueryInterface SITE.CPP
  46. //
  47. // Comments:
  48. //
  49. //********************************************************************
  50. STDMETHODIMP COleClientSite::QueryInterface(REFIID riid, LPVOID FAR* ppvObj)
  51. {
  52.         OutputDebugString("In IOCS::QueryInterfacern");
  53.         // delegate to the container Site
  54.         return m_pSite->QueryInterface(riid, ppvObj);
  55. }
  56. //**********************************************************************
  57. //
  58. // CSimpleApp::AddRef
  59. //
  60. // Purpose:
  61. //
  62. //      Adds to the reference count at the interface level.
  63. //
  64. // Parameters:
  65. //
  66. //      None
  67. //
  68. // Return Value:
  69. //
  70. //      ULONG   -   The new reference count of the interface
  71. //
  72. // Function Calls:
  73. //      Function                    Location
  74. //
  75. //      OutputDebugString           Windows API
  76. //
  77. // Comments:
  78. //
  79. //********************************************************************
  80. STDMETHODIMP_(ULONG) COleClientSite::AddRef()
  81. {
  82.         OutputDebugString("In IOCS::AddRefrn");
  83.         // increment the interface reference count (for debugging only)
  84.         ++m_nCount;
  85.         // delegate to the container Site
  86.         return m_pSite->AddRef();
  87. }
  88. //**********************************************************************
  89. //
  90. // CSimpleApp::Release
  91. //
  92. // Purpose:
  93. //
  94. //      Decrements the reference count at this level
  95. //
  96. // Parameters:
  97. //
  98. //      None
  99. //
  100. // Return Value:
  101. //
  102. //      ULONG   -   The new reference count of the interface.
  103. //
  104. // Function Calls:
  105. //      Function                    Location
  106. //
  107. //      OutputDebugString           Windows API
  108. //
  109. // Comments:
  110. //
  111. //********************************************************************
  112. STDMETHODIMP_(ULONG) COleClientSite::Release()
  113. {
  114.         OutputDebugString("In IOCS::Releasern");
  115.         // decrement the interface reference count (for debugging only)
  116.         --m_nCount;
  117.         // delegate to the container Site
  118.         return m_pSite->Release();
  119. }
  120. //**********************************************************************
  121. //
  122. // COleClientSite::SaveObject
  123. //
  124. // Purpose:
  125. //
  126. //      Called by the object when it wants to be saved to persistant
  127. //      storage
  128. //
  129. // Parameters:
  130. //
  131. //      None
  132. //
  133. // Return Value:
  134. //
  135. //      S_OK
  136. //
  137. // Function Calls:
  138. //      Function                            Location
  139. //
  140. //      OutputDebugString                   Windows API
  141. //      IOleObject::QueryInterface          Object
  142. //      IPersistStorage::SaveCompleted      Object
  143. //      IPersistStorage::Release            Object
  144. //      OleSave                             OLE API
  145. //                           OLE API
  146. //
  147. // Comments:
  148. //
  149. //********************************************************************
  150. STDMETHODIMP COleClientSite::SaveObject()
  151. {
  152.         CStabilize stabilize(m_pSite);
  153.         LPPERSISTSTORAGE lpPS;
  154.         SCODE sc = E_FAIL;
  155.         OutputDebugString("In IOCS::SaveObjectrn");
  156.         // get a pointer to IPersistStorage
  157.         HRESULT hErr = m_pSite->m_lpOleObject->QueryInterface(IID_IPersistStorage, (LPVOID FAR *)&lpPS);
  158.         // save the object
  159.         if (hErr == NOERROR)
  160.                 {
  161.                 sc =  OleSave(lpPS, m_pSite->m_lpObjStorage, TRUE) ;
  162.                 lpPS->SaveCompleted(NULL);
  163.                 lpPS->Release();
  164.                 }
  165.         return sc;
  166. }
  167. //**********************************************************************
  168. //
  169. // COleClientSite::GetMoniker
  170. //
  171. // Purpose:
  172. //
  173. //      Not Implemented
  174. //
  175. // Parameters:
  176. //
  177. //      Not Implemented
  178. //
  179. // Return Value:
  180. //
  181. // Function Calls:
  182. //      Function                    Location
  183. //
  184. //      OutputDebugString           Windows API
  185. //
  186. // Comments:
  187. //
  188. //      This function is not implemented because we don't support
  189. //      linking.
  190. //
  191. //********************************************************************
  192. STDMETHODIMP COleClientSite::GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER FAR* ppmk)
  193. {
  194.         OutputDebugString("In IOCS::GetMonikerrn");
  195.         // need to null the out pointer
  196.         *ppmk = NULL;
  197.         return E_NOTIMPL;
  198. }
  199. //**********************************************************************
  200. //
  201. // COleClientSite::GetContainer
  202. //
  203. // Purpose:
  204. //
  205. //      Not Implemented
  206. //
  207. // Parameters:
  208. //
  209. //      Not Implemented
  210. //
  211. // Return Value:
  212. //
  213. //      Not Implemented
  214. //
  215. // Function Calls:
  216. //      Function                    Location
  217. //
  218. //      OutputDebugString           Windows API
  219. //
  220. // Comments:
  221. //
  222. //      Not Implemented
  223. //
  224. //********************************************************************
  225. STDMETHODIMP COleClientSite::GetContainer(LPOLECONTAINER FAR* ppContainer)
  226. {
  227.         OutputDebugString("In IOCS::GetContainerrn");
  228.         // NULL the out pointer
  229.         *ppContainer = NULL;
  230.         return E_NOTIMPL;
  231. }
  232. //**********************************************************************
  233. //
  234. // COleClientSite::ShowObject
  235. //
  236. // Purpose:
  237. //
  238. //      Not Implemented
  239. //
  240. // Parameters:
  241. //
  242. //      Not Implemented
  243. //
  244. // Return Value:
  245. //
  246. //      Not Implemented
  247. //
  248. // Function Calls:
  249. //      Function                    Location
  250. //
  251. //      OutputDebugString           Windows API
  252. //
  253. // Comments:
  254. //
  255. //      This function is not implemented because we don't support
  256. //      linking.
  257. //
  258. //********************************************************************
  259. STDMETHODIMP COleClientSite::ShowObject()
  260. {
  261.         OutputDebugString("In IOCS::ShowObjectrn");
  262.         return NOERROR;
  263. }
  264. //**********************************************************************
  265. //
  266. // COleClientSite::OnShowWindow
  267. //
  268. // Purpose:
  269. //
  270. //      Object calls this method when it is opening/closing non-InPlace
  271. //      Window
  272. //
  273. // Parameters:
  274. //
  275. //      BOOL fShow  - TRUE if Window is opening, FALSE if closing
  276. //
  277. // Return Value:
  278. //
  279. //      S_OK
  280. //
  281. // Function Calls:
  282. //      Function                    Location
  283. //
  284. //      OutputDebugString           Windows API
  285. //      InvalidateRect              Windows API
  286. //                   OLE API
  287. //
  288. // Comments:
  289. //
  290. //********************************************************************
  291. STDMETHODIMP COleClientSite::OnShowWindow(BOOL fShow)
  292. {
  293.         CStabilize stabilize(m_pSite);
  294.         OutputDebugString("In IOCS::OnShowWindowrn");
  295.         m_pSite->m_fObjectOpen = fShow;
  296.         InvalidateRect(m_pSite->m_lpDoc->m_hDocWnd, NULL, TRUE);
  297.         // if object window is closing, then bring container window to top
  298.         if (! fShow) {
  299.                 BringWindowToTop(m_pSite->m_lpDoc->m_hDocWnd);
  300.                 SetFocus(m_pSite->m_lpDoc->m_hDocWnd);
  301.         }
  302.         return S_OK;
  303. }
  304. //**********************************************************************
  305. //
  306. // COleClientSite::RequestNewObjectLayout
  307. //
  308. // Purpose:
  309. //
  310. //      Not Implemented
  311. //
  312. // Parameters:
  313. //
  314. //      Not Implemented
  315. //
  316. // Return Value:
  317. //
  318. //      Not Implemented
  319. //
  320. // Function Calls:
  321. //      Function                    Location
  322. //
  323. //      OutputDebugString           Windows API
  324. //
  325. // Comments:
  326. //
  327. //      Not Implemented
  328. //
  329. //********************************************************************
  330. STDMETHODIMP COleClientSite::RequestNewObjectLayout()
  331. {
  332.         OutputDebugString("In IOCS::RequestNewObjectLayoutrn");
  333.         return E_NOTIMPL;
  334. }