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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * OLECLIP.C
  3.  *
  4.  * Routines to handle placing Native, ObjectLink, and OwnerLink
  5.  * information on the clipboard.
  6.  *
  7.  * Copyright(c) Microsoft Corp. 1992-1994 All Rights Reserved
  8.  * Win32 version, January 1994
  9.  */
  10. #ifdef MAKEOLESERVER
  11. #include <windows.h>
  12. #include <ole.h>
  13. #include "cosmo.h"
  14. #include "oleglobl.h"
  15. /*
  16.  * FOLECopyNative
  17.  *
  18.  * Purpose:
  19.  *  Allocates a memory block for Native data and places it on the clipboard,
  20.  *  assuming that the application has opened the clipboard.
  21.  *
  22.  * Parameters:
  23.  *  pOLE            LPXOLEGLOBALS containing clipboard formats.
  24.  *
  25.  * Return Value:
  26.  *  BOOL            TRUE if the data was copied, FALSE otherwise.
  27.  */
  28. BOOL WINAPI FOLECopyNative(LPXOLEGLOBALS pOLE)
  29.     {
  30.     HGLOBAL      hMem;
  31.     hMem=HGetPolyline(pGlob->hWndPolyline);
  32.     //Place Native data on clipboard.
  33.     if (NULL==hMem)
  34.         return FALSE;
  35.     SetClipboardData(pOLE->cfNative, hMem);
  36.     return TRUE;
  37.     }
  38. /*
  39.  * FOLECopyLink
  40.  *
  41.  * Purpose:
  42.  *  Places ObjectLink OR OwnerLink information on the clipboard.
  43.  *  This function assumes that the application already has the
  44.  *  clipboard open.
  45.  *
  46.  * Parameters:
  47.  *  pOLE            LPXOLEGLOBALS containing clipboard formats.
  48.  *  fOwnerLink      BOOL indicating to set OwnerLink (TRUE)/ObjectLink (FALSE)
  49.  *  pszDoc          LPSTR to the document name.
  50.  *
  51.  * Return Value:
  52.  *  BOOL            TRUE if copying to the clipboard was successful.
  53.  *                  FALSE on any failure.
  54.  */
  55. BOOL WINAPI FOLECopyLink(LPXOLEGLOBALS pOLE, BOOL fOwnerLink, LPSTR pszDoc)
  56.     {
  57.     HGLOBAL         hMem;
  58.     OLECLIPFORMAT   cf;
  59.     //Retrieve a handle to the OwnerLink/ObjectLink format.
  60.     hMem=HLinkConstruct(rgpsz[IDS_CLASSCOSMO], pszDoc, rgpsz[IDS_FIGURE]);
  61.     if (NULL==hMem)
  62.         return FALSE;
  63.     //Set one or the other format.
  64.     cf=(fOwnerLink) ? (pOLE->cfOwnerLink) : (pOLE->cfObjectLink);
  65.     hMem=SetClipboardData(cf, hMem);
  66.     return (NULL!=hMem);
  67.     }
  68. /*
  69.  * HLinkConstruct
  70.  *
  71.  * Purpose:
  72.  *  Builds an ObjectLink and OwnerLink text string for OLE clipboard
  73.  *  interaction in the format of "classnamedocumentobject"
  74.  *
  75.  * Parameters:
  76.  *  pszClass        LPSTR to the classname.
  77.  *  pszDoc          LPSTR to the document name.
  78.  *  pszObj          LPSTR to the object name.
  79.  *
  80.  * Return Value:
  81.  *  HGLOBAL         Global memory handle to an block containing
  82.  *                  the three strings with the appropriate separator.
  83.  */
  84. HGLOBAL WINAPI HLinkConstruct(LPSTR pszClass, LPSTR pszDoc, LPSTR pszObj)
  85.     {
  86.     HGLOBAL     hMem;
  87.     UINT        cch1, cch2, cch3;
  88.     LPSTR       psz;
  89.     if (NULL==pszClass || NULL==pszDoc || NULL==pszObj)
  90.         return NULL;
  91.     //We'll need lengths later.
  92.     cch1=lstrlen(pszClass);
  93.     cch2=lstrlen(pszDoc);
  94.     cch3=lstrlen(pszObj);
  95.     //Extra 4 is for the null-terminators.
  96.     hMem=GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, (DWORD)(4+cch1+cch2+cch3));
  97.     if (NULL==hMem)
  98.         return NULL;
  99.     psz=GlobalLock(hMem);
  100.     lstrcpy(psz, pszClass);
  101.     psz+=cch1+1;
  102.     lstrcpy(psz, pszDoc);
  103.     psz+=cch2+1;
  104.     lstrcpy(psz, pszObj);
  105.     *(psz+cch3+1)=0;        //Add the final null terminator.
  106.     GlobalUnlock(hMem);
  107.     return hMem;
  108.     }
  109. #endif //MAKEOLESERVER