home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / include / emf.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-11  |  2.8 KB  |  76 lines

  1. #pragma once
  2.  
  3. //-----------------------------------------------------------------------------------//
  4. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  5. //                             ISBN  0-13-086985-6                                   //
  6. //                                                                                   //
  7. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  8. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  9. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  10. //                                                                                   //
  11. //  FileName   : emf.h                                                                 //
  12. //  Description: Enhanced metafile handling                                          //
  13. //  Version    : 1.00.000, May 31, 2000                                              //
  14. //-----------------------------------------------------------------------------------//
  15.  
  16. class KEnumEMF
  17. {
  18.     // virtual function to process every EMF record, return 0 to terminate
  19.     virtual int ProcessRecord(HDC hDC, HANDLETABLE * pHTable, const ENHMETARECORD * pEMFR, int nObj)
  20.     {
  21.         return 0;
  22.     }
  23.  
  24.     // typedef int (CALLBACK* ENHMFENUMPROC)(HDC, HANDLETABLE FAR*, CONST ENHMETARECORD *, int, LPARAM);
  25.     
  26.     // static callback function, dispatch to virtual function ProcessRecord
  27.     static int CALLBACK EMFProc(HDC hDC, HANDLETABLE * pHTable, 
  28.         const ENHMETARECORD * pEMFR, int nObj, LPARAM lpData)
  29.     {
  30.         KEnumEMF * pObj = (KEnumEMF *) lpData;
  31.  
  32.         if ( IsBadWritePtr(pObj, sizeof(KEnumEMF)) )
  33.         {
  34.             assert(false);
  35.             return 0;
  36.         }
  37.  
  38.         return pObj->ProcessRecord(hDC, pHTable, pEMFR, nObj);
  39.     }
  40.  
  41. public:
  42.     
  43.     BOOL EnumEMF(HDC hDC, HENHMETAFILE hemf, const RECT * lpRect)
  44.     {
  45.         return ::EnumEnhMetaFile(hDC, hemf, EMFProc, this, lpRect);
  46.     }
  47. };
  48.  
  49.  
  50. // map a rectangle in logical coordinate to 0.01 mm units
  51. void Map10um(HDC hDC, RECT & rect);
  52.  
  53. // load EMF from resource
  54. HENHMETAFILE LoadEMF(HMODULE hModule, LPCTSTR pName);
  55.  
  56. // get EMF dimension
  57. void GetEMFDimension(HDC hDC, HENHMETAFILE hEmf, int & width, int & height);
  58.  
  59. // display EMF with a ratio
  60. BOOL DisplayEMF(HDC hDC, HENHMETAFILE hEmf, int x, int y, int scalex, int scaley, 
  61.                 KEnumEMF * enumerator, bool showxform=false);
  62.  
  63. HDC QuerySaveEMFFile(const TCHAR * description, const RECT * rcFrame, TCHAR szFileName[]);
  64.  
  65. HENHMETAFILE QueryOpenEMFFile(TCHAR szFileName[]);
  66.  
  67. HENHMETAFILE PasteFromClipboard(HWND hWnd);
  68. void CopyToClipboard(HWND hWnd, HENHMETAFILE hEmf);
  69.  
  70. HPALETTE GetEMFPalette(HENHMETAFILE hEmf, HDC hDC);
  71.  
  72. // Transformation to map recording device's device coordinate space to destination device's logical coordinate space
  73. BOOL GetPlayTransformation(HENHMETAFILE hEmf, const RECT * rcPic, XFORM & xformPlay);
  74.  
  75.  
  76.