home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / src / ctlpstm.cpp < prev    next >
C/C++ Source or Header  |  1998-06-16  |  6KB  |  212 lines

  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.  
  11. #include "stdafx.h"
  12.  
  13. #ifdef AFXCTL_PROP_SEG
  14. #pragma code_seg(AFXCTL_PROP_SEG)
  15. #endif
  16.  
  17. #ifdef _DEBUG
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21.  
  22. #define new DEBUG_NEW
  23.  
  24. /////////////////////////////////////////////////////////////////////////////
  25. // COleControl::XPersistStreamInit
  26.  
  27. STDMETHODIMP_(ULONG) COleControl::XPersistStreamInit::AddRef()
  28. {
  29.     METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  30.     return (ULONG)pThis->ExternalAddRef();
  31. }
  32.  
  33. STDMETHODIMP_(ULONG) COleControl::XPersistStreamInit::Release()
  34. {
  35.     METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  36.     return (ULONG)pThis->ExternalRelease();
  37. }
  38.  
  39. STDMETHODIMP COleControl::XPersistStreamInit::QueryInterface(
  40.     REFIID iid, LPVOID* ppvObj)
  41. {
  42.     METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  43.     return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
  44. }
  45.  
  46. STDMETHODIMP COleControl::XPersistStreamInit::GetClassID(LPCLSID lpClassID)
  47. {
  48.     METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  49.     return pThis->GetClassID(lpClassID);
  50. }
  51.  
  52. STDMETHODIMP COleControl::XPersistStreamInit::IsDirty()
  53. {
  54.     METHOD_PROLOGUE_EX_(COleControl, PersistStreamInit)
  55.     return pThis->m_bModified ? S_OK : S_FALSE;
  56. }
  57.  
  58. STDMETHODIMP COleControl::XPersistStreamInit::Load(LPSTREAM pStm)
  59. {
  60.     METHOD_PROLOGUE_EX(COleControl, PersistStreamInit)
  61.     return pThis->LoadState(pStm);
  62. }
  63.  
  64. STDMETHODIMP COleControl::XPersistStreamInit::Save(LPSTREAM pStm,
  65.     BOOL fClearDirty)
  66. {
  67.     METHOD_PROLOGUE_EX(COleControl, PersistStreamInit)
  68.  
  69.     // Delegate to SaveState.
  70.     HRESULT hr = pThis->SaveState(pStm);
  71.  
  72.     // Bookkeeping:  Clear the dirty flag, if requested.
  73.     if (fClearDirty)
  74.         pThis->m_bModified = FALSE;
  75.  
  76.     return hr;
  77. }
  78.  
  79. STDMETHODIMP COleControl::XPersistStreamInit::GetSizeMax(ULARGE_INTEGER*)
  80. {
  81.     return E_NOTIMPL;
  82. }
  83.  
  84. STDMETHODIMP COleControl::XPersistStreamInit::InitNew()
  85. {
  86.     METHOD_PROLOGUE_EX(COleControl, PersistStreamInit)
  87.  
  88.     // Delegate to OnResetState.
  89.     pThis->OnResetState();
  90.  
  91.     // Unless IOleObject::SetClientSite is called after this, we can
  92.     // count on ambient properties being available while loading.
  93.     pThis->m_bCountOnAmbients = TRUE;
  94.  
  95.     // Properties have been initialized
  96.     pThis->m_bInitialized = TRUE;
  97.  
  98.     // Uncache cached ambient properties
  99.     _afxAmbientCache->Cache(NULL);
  100.  
  101.     return S_OK;
  102. }
  103.  
  104. /////////////////////////////////////////////////////////////////////////////
  105. // COleControl::XPersistMemory
  106.  
  107. STDMETHODIMP_(ULONG) COleControl::XPersistMemory::AddRef()
  108. {
  109.     METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  110.     return (ULONG)pThis->ExternalAddRef();
  111. }
  112.  
  113. STDMETHODIMP_(ULONG) COleControl::XPersistMemory::Release()
  114. {
  115.     METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  116.     return (ULONG)pThis->ExternalRelease();
  117. }
  118.  
  119. STDMETHODIMP COleControl::XPersistMemory::QueryInterface(
  120.     REFIID iid, LPVOID* ppvObj)
  121. {
  122.     METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  123.     return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
  124. }
  125.  
  126. STDMETHODIMP COleControl::XPersistMemory::GetClassID(LPCLSID lpClassID)
  127. {
  128.     METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  129.     return pThis->GetClassID(lpClassID);
  130. }
  131.  
  132. STDMETHODIMP COleControl::XPersistMemory::IsDirty()
  133. {
  134.     METHOD_PROLOGUE_EX_(COleControl, PersistMemory)
  135.     return pThis->m_bModified ? S_OK : S_FALSE;
  136. }
  137.  
  138. STDMETHODIMP COleControl::XPersistMemory::Load(LPVOID lpStream, ULONG cbSize)
  139. {
  140.     METHOD_PROLOGUE_EX(COleControl, PersistMemory)
  141.  
  142.     HRESULT hr = S_OK;
  143.     TRY
  144.     {
  145.         // Delegate to the Serialize method.
  146.         CMemFile file((LPBYTE)lpStream, cbSize);
  147.         CArchive ar(&file, CArchive::load);
  148.         pThis->Serialize(ar);
  149.     }
  150.     CATCH_ALL(e)
  151.     {
  152.         // The load failed.  Delete any partially-initialized state.
  153.         pThis->OnResetState();
  154.         pThis->m_bInitialized = TRUE;
  155.         hr = E_FAIL;
  156.         DELETE_EXCEPTION(e);
  157.     }
  158.     END_CATCH_ALL
  159.  
  160.     // Clear the modified flag.
  161.     pThis->m_bModified = FALSE;
  162.  
  163.     // Unless IOleObject::SetClientSite is called after this, we can
  164.     // count on ambient properties being available while loading.
  165.     pThis->m_bCountOnAmbients = TRUE;
  166.  
  167.     // Properties have been initialized
  168.     pThis->m_bInitialized = TRUE;
  169.  
  170.     // Uncache cached ambient properties
  171.     _afxAmbientCache->Cache(NULL);
  172.  
  173.     return hr;
  174. }
  175.  
  176. STDMETHODIMP COleControl::XPersistMemory::Save(LPVOID, BOOL, ULONG)
  177. {
  178.     return E_NOTIMPL;
  179. }
  180.  
  181. STDMETHODIMP COleControl::XPersistMemory::GetSizeMax(ULONG*)
  182. {
  183.     return E_NOTIMPL;
  184. }
  185.  
  186. STDMETHODIMP COleControl::XPersistMemory::InitNew()
  187. {
  188.     METHOD_PROLOGUE_EX(COleControl, PersistMemory)
  189.  
  190.     // Delegate to OnResetState.
  191.     pThis->OnResetState();
  192.  
  193.     // Unless IOleObject::SetClientSite is called after this, we can
  194.     // count on ambient properties being available while loading.
  195.     pThis->m_bCountOnAmbients = TRUE;
  196.  
  197.     // Properties have been initialized
  198.     pThis->m_bInitialized = TRUE;
  199.  
  200.     // Uncache cached ambient properties
  201.     _afxAmbientCache->Cache(NULL);
  202.  
  203.     return S_OK;
  204. }
  205.  
  206. /////////////////////////////////////////////////////////////////////////////
  207. // Force any extra compiler-generated code into AFX_INIT_SEG
  208.  
  209. #ifdef AFX_INIT_SEG
  210. #pragma code_seg(AFX_INIT_SEG)
  211. #endif
  212.