home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / Chapt_16 / EMFScope / SPOOLFIL.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-12  |  3.0 KB  |  121 lines

  1. //-----------------------------------------------------------------------------------//
  2. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  3. //                             ISBN  0-13-086985-6                                   //
  4. //                                                                                   //
  5. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  6. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  7. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  8. //                                                                                   //
  9. //  FileName   : spoolfile.cpp                                                         //
  10. //  Description: KSpoolFile class                                                    //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #define STRICT
  15. #include <windows.h>
  16. #include <assert.h>
  17.  
  18. #include "Winpp.h"
  19.  
  20. #include "Spoolfil.h"
  21. #include "spehon32\\spehon32.h"
  22. #include "resource.h"
  23.  
  24.  
  25. KSpoolFile::KSpoolFile()
  26. {
  27.     strcpy(DevData, "\x1A\x1B\x1BSpool");
  28.             
  29.     size_header  = 8;
  30.     size_devmode = 0;
  31.     size_std     = 0;
  32. }
  33.  
  34.  
  35. BOOL KSpoolFile::ReceiveData(COPYDATASTRUCT *cd)
  36. {
  37.     switch (cd->dwData)
  38.     {
  39.         case REC_DC:
  40.             size_devmode = cd->cbData;
  41.             memcpy(&DevData[size_header], cd->lpData, size_devmode);
  42.             break;
  43.  
  44.         case REC_STD:
  45.             size_std = cd->cbData;
  46.             memcpy(&DevData[size_header+size_devmode], cd->lpData, size_std);
  47.             break;
  48.  
  49.         default: 
  50.             return FALSE;
  51.     }
  52.  
  53.     return TRUE;
  54. }
  55.  
  56. const char frame_stp [] = 
  57.     { 
  58.         0x53, 0x54, 0x50, 0x02, 0x10, 0x00, 0x00, 0x00,
  59.         0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
  60.     };
  61.  
  62. const char frame_frm [] =
  63.     {
  64.         0x46, 0x54, 0x4D, 0x02
  65.     };
  66.  
  67. const char frame_enp [] =
  68.     {
  69.         0x45, 0x4E, 0x50, 0x02, 0x08, 0x00, 0x00, 0x00
  70.     };
  71.  
  72. const char frame_end [] = 
  73.     {
  74.         0x45, 0x4E, 0x44, 0x02, 0x08, 0x00, 0x00, 0x00
  75.     };
  76.  
  77.  
  78. // get .dev file name from a .emf file name
  79. const char *GetDevFileName(const char *emffilename)
  80. {
  81.     static char   devfilename[MAX_PATH];
  82.     int           len;
  83.     
  84.     len = strlen(emffilename);
  85.  
  86.     if (len<4) 
  87.         return NULL;
  88.     
  89.     if ( (strcmp(emffilename+len-4, ".emf")!=0) &&
  90.          (strcmp(emffilename+len-4, ".EMF")!=0) )
  91.         return NULL;
  92.  
  93.     
  94.     strcpy(devfilename, emffilename);
  95.     devfilename[len-4] = 0;                // remove .emf extension
  96.     strcat(devfilename, ".dev");
  97.  
  98.     return devfilename;
  99. }
  100.  
  101.  
  102. void KSpoolFile::GenDevFile(const char *emffilename)
  103. {
  104.     const char    *devfilename;
  105.     unsigned long dwWritten;
  106.     HANDLE        hdev;
  107.  
  108.     devfilename = GetDevFileName(emffilename);
  109.     if (devfilename==NULL) 
  110.         return;
  111.  
  112.     hdev = CreateFile(devfilename, GENERIC_WRITE, 0, NULL, CREATE_NEW,
  113.                       FILE_ATTRIBUTE_NORMAL, NULL);
  114.  
  115.     if (hdev == INVALID_HANDLE_VALUE) 
  116.         return;
  117.  
  118.     WriteFile(hdev, DevData, size_header + size_devmode + size_std, &dwWritten, NULL);
  119.     CloseHandle(hdev);
  120. }
  121.