ctlpstm.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10. #include "stdafx.h"
  11. #ifdef AFXCTL_PROP_SEG
  12. #pragma code_seg(AFXCTL_PROP_SEG)
  13. #endif
  14. #ifdef _DEBUG
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. #define new DEBUG_NEW
  19. /////////////////////////////////////////////////////////////////////////////
  20. // COleControl::XPersistStreamInit
  21. STDMETHODIMP_(ULONG) COleControl::XPersistStreamInit::AddRef()
  22. {
  23. METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  24. return (ULONG)pThis->ExternalAddRef();
  25. }
  26. STDMETHODIMP_(ULONG) COleControl::XPersistStreamInit::Release()
  27. {
  28. METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  29. return (ULONG)pThis->ExternalRelease();
  30. }
  31. STDMETHODIMP COleControl::XPersistStreamInit::QueryInterface(
  32. REFIID iid, LPVOID* ppvObj)
  33. {
  34. METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  35. return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
  36. }
  37. STDMETHODIMP COleControl::XPersistStreamInit::GetClassID(LPCLSID lpClassID)
  38. {
  39. METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  40. return pThis->GetClassID(lpClassID);
  41. }
  42. STDMETHODIMP COleControl::XPersistStreamInit::IsDirty()
  43. {
  44. METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  45. return pThis->m_bModified ? S_OK : S_FALSE;
  46. }
  47. STDMETHODIMP COleControl::XPersistStreamInit::Load(LPSTREAM pStm)
  48. {
  49. METHOD_PROLOGUE_EX(COleControl, PersistStreamInit)
  50. return pThis->LoadState(pStm);
  51. }
  52. STDMETHODIMP COleControl::XPersistStreamInit::Save(LPSTREAM pStm,
  53. BOOL fClearDirty)
  54. {
  55. METHOD_PROLOGUE_EX(COleControl, PersistStreamInit)
  56. // Delegate to SaveState.
  57. HRESULT hr = pThis->SaveState(pStm);
  58. // Bookkeeping: Clear the dirty flag, if requested.
  59. if (fClearDirty)
  60. pThis->m_bModified = FALSE;
  61. return hr;
  62. }
  63. STDMETHODIMP COleControl::XPersistStreamInit::GetSizeMax(ULARGE_INTEGER*)
  64. {
  65. return E_NOTIMPL;
  66. }
  67. STDMETHODIMP COleControl::XPersistStreamInit::InitNew()
  68. {
  69. METHOD_PROLOGUE_EX(COleControl, PersistStreamInit)
  70. // Delegate to OnResetState.
  71. pThis->OnResetState();
  72. // Unless IOleObject::SetClientSite is called after this, we can
  73. // count on ambient properties being available while loading.
  74. pThis->m_bCountOnAmbients = TRUE;
  75. // Properties have been initialized
  76. pThis->m_bInitialized = TRUE;
  77. // Uncache cached ambient properties
  78. _afxAmbientCache->Cache(NULL);
  79. return S_OK;
  80. }
  81. /////////////////////////////////////////////////////////////////////////////
  82. // COleControl::XPersistMemory
  83. STDMETHODIMP_(ULONG) COleControl::XPersistMemory::AddRef()
  84. {
  85. METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  86. return (ULONG)pThis->ExternalAddRef();
  87. }
  88. STDMETHODIMP_(ULONG) COleControl::XPersistMemory::Release()
  89. {
  90. METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  91. return (ULONG)pThis->ExternalRelease();
  92. }
  93. STDMETHODIMP COleControl::XPersistMemory::QueryInterface(
  94. REFIID iid, LPVOID* ppvObj)
  95. {
  96. METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  97. return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
  98. }
  99. STDMETHODIMP COleControl::XPersistMemory::GetClassID(LPCLSID lpClassID)
  100. {
  101. METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  102. return pThis->GetClassID(lpClassID);
  103. }
  104. STDMETHODIMP COleControl::XPersistMemory::IsDirty()
  105. {
  106. METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  107. return pThis->m_bModified ? S_OK : S_FALSE;
  108. }
  109. STDMETHODIMP COleControl::XPersistMemory::Load(LPVOID lpStream, ULONG cbSize)
  110. {
  111. METHOD_PROLOGUE_EX(COleControl, PersistMemory)
  112. HRESULT hr = S_OK;
  113. TRY
  114. {
  115. // Delegate to the Serialize method.
  116. CMemFile file((LPBYTE)lpStream, cbSize);
  117. CArchive ar(&file, CArchive::load);
  118. pThis->Serialize(ar);
  119. }
  120. CATCH_ALL(e)
  121. {
  122. // The load failed. Delete any partially-initialized state.
  123. pThis->OnResetState();
  124. pThis->m_bInitialized = TRUE;
  125. hr = E_FAIL;
  126. DELETE_EXCEPTION(e);
  127. }
  128. END_CATCH_ALL
  129. // Clear the modified flag.
  130. pThis->m_bModified = FALSE;
  131. // Unless IOleObject::SetClientSite is called after this, we can
  132. // count on ambient properties being available while loading.
  133. pThis->m_bCountOnAmbients = TRUE;
  134. // Properties have been initialized
  135. pThis->m_bInitialized = TRUE;
  136. // Uncache cached ambient properties
  137. _afxAmbientCache->Cache(NULL);
  138. return hr;
  139. }
  140. STDMETHODIMP COleControl::XPersistMemory::Save(LPVOID, BOOL, ULONG)
  141. {
  142. return E_NOTIMPL;
  143. }
  144. STDMETHODIMP COleControl::XPersistMemory::GetSizeMax(ULONG*)
  145. {
  146. return E_NOTIMPL;
  147. }
  148. STDMETHODIMP COleControl::XPersistMemory::InitNew()
  149. {
  150. METHOD_PROLOGUE_EX(COleControl, PersistMemory)
  151. // Delegate to OnResetState.
  152. pThis->OnResetState();
  153. // Unless IOleObject::SetClientSite is called after this, we can
  154. // count on ambient properties being available while loading.
  155. pThis->m_bCountOnAmbients = TRUE;
  156. // Properties have been initialized
  157. pThis->m_bInitialized = TRUE;
  158. // Uncache cached ambient properties
  159. _afxAmbientCache->Cache(NULL);
  160. return S_OK;
  161. }
  162. /////////////////////////////////////////////////////////////////////////////
  163. // Force any extra compiler-generated code into AFX_INIT_SEG
  164. #ifdef AFX_INIT_SEG
  165. #pragma code_seg(AFX_INIT_SEG)
  166. #endif