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

Windows编程

开发平台:

Visual C++

  1. //=--------------------------------------------------------------------------=
  2. // IODoc.Cpp
  3. //=--------------------------------------------------------------------------=
  4. // Copyright 1995-1997 Microsoft Corporation.  All Rights Reserved.
  5. //
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  7. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  8. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  9. // PARTICULAR PURPOSE.
  10. //=--------------------------------------------------------------------------=
  11. //
  12. // implementation of the IOleDocument interface for CDocumentObject.
  13. //
  14. #include "CDocObj.H"
  15. // for ASSERT and FAIL
  16. //
  17. SZTHISFILE
  18. //=--------------------------------------------------------------------------=
  19. // CDocumentObject::CreateView [IOleDocument]
  20. //=--------------------------------------------------------------------------=
  21. // asks the document object to create a new view sub-object
  22. //
  23. // Parameters:
  24. //    IOleInPlaceSite *   - [in] pointer to container's view site object
  25. //    IStream*            - [in] pointer to stream to initialize view with
  26. //    DWORD               - [in] reserved
  27. //    IOleDocumentView*   - [out] address to put interface pointer to new view
  28. //
  29. // Output:
  30. //    HRESULT             - S_OK, E_POINTER, E_OUTOFMEMORY, E_UNEXPECTED, 
  31. //                          E_FAIL
  32. //
  33. // Notes: 
  34. //      This implementation only supports a single view!
  35. //
  36. STDMETHODIMP CDocumentObject::CreateView(IOleInPlaceSite* pIPSite, IStream* pstm, 
  37.                                          DWORD dwReserved, IOleDocumentView** ppView)
  38. {
  39.     TRACE("nEntering CDocumentObject::CreateView");
  40.     *ppView = NULL;
  41.     if (dwReserved != 0 || m_pDocSite == NULL)
  42.         return E_UNEXPECTED;
  43.     // We only support a single view...so if view site is already
  44.     // set, fail.
  45.     if (m_pViewSite != NULL)
  46.         return E_FAIL;
  47.     // Otherwise, connect the view site to our object
  48.     IOleDocumentView* pView = NULL;
  49.     InternalQueryInterface(IID_IOleDocumentView, (void**)&pView);
  50.     ASSERT(pView != NULL, "object must support IID_IOleDocumentView");
  51.     HRESULT hr = pView->SetInPlaceSite(pIPSite);
  52.     if (SUCCEEDED(hr))
  53.     {
  54.         // Return the IOleDocumentView pointer 
  55.         *ppView = pView;
  56.         // If a saved view state is provided, restore the view state.
  57.         if (pstm)
  58.             hr = pView->ApplyViewState(pstm);
  59.     }
  60. else
  61.         pView->Release();
  62.     TRACE("nLeaving CDocumentObject::CreateView");
  63.     return hr;
  64. }
  65. //=--------------------------------------------------------------------------=
  66. // CDocumentObject::GetDocMiscStatus [IOleDocument]
  67. //=--------------------------------------------------------------------------=
  68. // returns miscellaneous status bits describing the document object
  69. //
  70. // Parameters:
  71. //    DWORD *   - [out] address to put misc status bits in
  72. //
  73. // Output:
  74. //    HRESULT   - S_OK, E_POINTER
  75. //
  76. // Notes:
  77. //
  78. STDMETHODIMP CDocumentObject::GetDocMiscStatus(DWORD* pdwStatus)
  79. {
  80.     TRACE("nCDocumentObject::GetDocMiscStatus");
  81. if (pdwStatus)
  82. {
  83.         // m_ObjectType (from base class CAutomationObject) is the 
  84.         // index into the global object table...
  85. *pdwStatus = MISCFLAGSOFDOCOBJECT(m_ObjectType);
  86. return S_OK;
  87. }
  88. else
  89. return E_POINTER;
  90. }
  91. //=--------------------------------------------------------------------------=
  92. // CDocumentObject::EnumViews [IOleDocument]
  93. //=--------------------------------------------------------------------------=
  94. // creates an enumerator object that enumerates the views of the document object
  95. //
  96. // Parameters:
  97. //    IEnumOleDocumentViews**   - [out] address to put enumerator interface
  98. //    IOleDocumentView**        - [out] address to store single view interface 
  99. //
  100. // Output:
  101. //    HRESULT             - S_OK, E_POINTER, E_OUTOFMEMORY
  102. //
  103. // Notes:
  104. //      This implementation only supports a single view!   
  105. //
  106. STDMETHODIMP CDocumentObject::EnumViews(IEnumOleDocumentViews** ppEnum, 
  107.                                         IOleDocumentView** ppView)
  108. {
  109.     TRACE("nCDocumentObject::EnumViews");
  110.     if (!ppEnum || !ppView)
  111.         return E_POINTER;
  112. // Retrieve pointer to our single view
  113.     *ppEnum = NULL;
  114. return InternalQueryInterface(IID_IOleDocumentView, (void**)ppView);
  115. }