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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * OLEFILE.C
  3.  *
  4.  * Functions for handling special case OLE functions for operations
  5.  * on a File menu such as New, Open, Save, SaveAs, and Exit.
  6.  *
  7.  * Functions:
  8.  *  PDocRevokeAndCreate
  9.  *
  10.  * Copyright(c) Microsoft Corp. 1992-1994 All Rights Reserved
  11.  * Win32 version, January 1994
  12.  */
  13. #ifdef MAKEOLESERVER
  14. #include <windows.h>
  15. #include <ole.h>
  16. #include "cosmo.h"
  17. #include "oleglobl.h"
  18. /*
  19.  * PDocRevokeAndCreate
  20.  *
  21.  * Purpose:
  22.  *  Standard sequence of calling OleRevokeServerDoc, allocating and
  23.  *  initializing a new OLESERVERDOC structure, and calling
  24.  *  OleRegisterServerDoc.
  25.  *
  26.  * Parameters:
  27.  *  pOLE            LPXOLEGLOBALS pointer to OLE global variables.
  28.  *
  29.  * Return Value:
  30.  *  LPCOSMODOC      Pointer to the new document, or NULL if it fails.
  31.  *
  32.  */
  33. LPCOSMODOC WINAPI PDocRevokeAndCreate(LPXOLEGLOBALS pOLE)
  34.     {
  35.     LPCOSMODOC      pDoc;
  36.     OLESTATUS       os;
  37.     os=OleRevokeServerDoc(pOLE->pSvr->pDoc->lh);
  38.     /*
  39.      * Even through we are revoking the document, the server will also
  40.      * be Released (through not revoked) since no OLE connections will
  41.      * exist to the server.  Since ServerRelease in this application
  42.      * frees the allocated document, we need to wait until we pass
  43.      * ServerRelease before allocating a new document.  Otherwise we'd
  44.      * allocate a new one and ServerRelease would immediately free it.
  45.      *
  46.      * So in calling FOLEReleaseWait we watch the server's fRelease flag.
  47.      */
  48.     if (OLE_WAIT_FOR_RELEASE==os)
  49.         {
  50.         pOLE->pSvr->fRelease=FALSE;
  51.         FOLEReleaseWait(&pOLE->pSvr->fRelease, pOLE->pSvr->lh);
  52.         }
  53.     pDoc=PDocumentAllocate(&pOLE->vtblDoc);
  54.     pOLE->pSvr->pDoc=pDoc;
  55.     if (NULL==pDoc)
  56.         return NULL;
  57.     os=OleRegisterServerDoc(pOLE->pSvr->lh, pGlob->szFile,
  58.                             (LPOLESERVERDOC)pOLE->pSvr->pDoc,
  59.                             &pOLE->pSvr->pDoc->lh);
  60.     pOLE->pSvr->fLink=FALSE;
  61.     pOLE->pSvr->fEmbed=FALSE;
  62.     MenuEmbeddingSet(pGlob->hWnd, NULL, FALSE);
  63.     return pDoc;
  64.     }
  65. #endif //MAKEOLESERVER