Clipboard and Resource Formats

Applications can imbed multimedia data into program resources and interchange that data through the clipboard.

The following clipboard and resource format types are defined in the OS2MEDEF.H file:

The following code fragment is an example of retrieving digital audio information from the clipboard. Source code for ADMCEDIT is located in the \TOOLKIT\SAMPLES\MM\ADMCT subdirectory.

{HAB            habClipboard;
HMQ            hmq;

HMMIO          hmmioMem;           /* handle to memory file   */

MMIOINFO       mmioinfo;           /* info struct for memory file */

ULONG          ulFormatInfo = 0;
ULONG          rc;
PULONG         pulDataSize;

LONG           lBytesRead;
LONG           lReturnCode;

MMAUDIOHEADER  mmaudioheader;
MMAUDIOHEADER  mmaudioheaderTemp;

PSZ            pTempBuffer;
PVOID          pNewBuffer;

  habClipboard = WinInitialize( 0 );
  if ( !habClipboard )
     {
     return ( MCIERR_CLIPBOARD_ERROR );
     }

  hmq = WinCreateMsgQueue( habClipboard, 0 );

  if ( !hmq )
     {
     fCreatedMQ = FALSE;
     }

/*  habClipboard = WinQueryAnchorBlock( HWND_DESKTOP ); */

  /*****************************************************************
  * Check to see if there is a wave (CF_WAVE is the defined type) in
  * the clipboard.
  ******************************************************************/

  rc = WinQueryClipbrdFmtInfo( habClipboard,
                          CF_WAVE,
                          &ulFormatInfo );


  if ( !WinOpenClipbrd( habClipboard ) )
     {
     WinCloseClipbrd( habClipboard );
     return ( MCIERR_CLIPBOARD_ERROR );
     }

  pTempBuffer = ( PSZ ) WinQueryClipbrdData( habClipboard, CF_WAVE );

  if ( !pTempBuffer )
     {
     WinCloseClipbrd( habClipboard );
     return ( MCIERR_CLIPBOARD_ERROR );
     }

  /*****************************************************************
  * We need to find out how much data is in the file.  Retrieve
  * the length of the RIFF chunk.
  ******************************************************************/
  pulDataSize = ( PULONG ) pTempBuffer + 1;


  memset( &mmioinfo, '\0', sizeof( MMIOINFO ) );

  /*****************************************************************
  * Prepare to open a memory file--the buffer * in the clipboard
  * contains the actual RIFF file which the WAVE IOProc already knows
  * how to parse--use  it to retrieve the information and keep the MCD
  * from file-format dependence.
  ******************************************************************/

  mmioinfo.fccIOProc = mmioFOURCC( 'W', 'A', 'V', 'E' ) ;
  mmioinfo.fccChildIOProc = FOURCC_MEM;

  rc = CheckMem ( (PVOID) pulDataSize,
                    sizeof ( ULONG ),
                    PAG_READ | PAG_WRITE );

  if (rc != MCIERR_SUCCESS)
     {
     WinCloseClipbrd( habClipboard );
     return (MCIERR_OUT_OF_MEMORY );
     }


  mmioinfo.cchBuffer = ( *pulDataSize) + 8;
  mmioinfo.pchBuffer = pTempBuffer;


  hmmioMem = mmioOpen( NULL,
                       &mmioinfo,
                       MMIO_READ );

  if ( !hmmioMem )
     {
     WinCloseClipbrd( habClipboard );
     return ( mmioinfo.ulErrorRet );
     }


[Back: Editing Operations]
[Next: Audio Media Driver Clipboard Commands]