1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**************************************************************************\ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Module Name: 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* GdiplusMetafile.h 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Abstract: 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Metafile related declarations 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov\**************************************************************************/ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _GDIPLUSMETAFILE_H 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _GDIPLUSMETAFILE_H 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Metafile : public Image 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class Image; 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Read a metafile 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile() 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(NULL); 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = Ok; 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Playback a metafile from a HMETAFILE 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // If deleteWmf is TRUE, then when the metafile is deleted, 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // the hWmf will also be deleted. Otherwise, it won't be. 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile(IN HMETAFILE hWmf, 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const APMFileHeader * apmFileHeader, 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN BOOL deleteWmf = FALSE) 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMetafileFromWmf(hWmf, deleteWmf, apmFileHeader, &metafile); 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Playback a metafile from a HENHMETAFILE 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // If deleteEmf is TRUE, then when the metafile is deleted, 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // the hEmf will also be deleted. Otherwise, it won't be. 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile(IN HENHMETAFILE hEmf, 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN BOOL deleteEmf = FALSE) 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMetafileFromEmf(hEmf, deleteEmf, &metafile); 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Playback a metafile from a file 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile(IN const WCHAR* filename) 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMetafileFromFile(filename, &metafile); 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Playback a WMF metafile from a file 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile(IN const WCHAR* filename, 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const APMFileHeader * apmFileHeader 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMetafileFromWmfFile(filename, apmFileHeader, &metafile); 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Playback a metafile from a stream 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile(IN IStream* stream) 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMetafileFromStream(stream, &metafile); 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Record a metafile to memory 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafile( 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, NULL, MetafileFrameUnitGdi, 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Record a metafile to memory 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const RectF & frameRect, 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafile( 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, &frameRect, frameUnit, 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Record a metafile to memory 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Rect & frameRect, 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafileI( 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, &frameRect, frameUnit, 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Record a metafile to a file 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR* fileName, 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafileFileName(fileName, 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, NULL, MetafileFrameUnitGdi, 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Record a metafile to a file 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR* fileName, 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const RectF & frameRect, 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafileFileName(fileName, 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, &frameRect, frameUnit, 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Record a metafile to a file 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR* fileName, 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Rect & frameRect, 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafileFileNameI(fileName, 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, &frameRect, frameUnit, 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Record a metafile to a stream 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN IStream * stream, 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafileStream(stream, 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, NULL, MetafileFrameUnitGdi, 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Record a metafile to a stream 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN IStream * stream, 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const RectF & frameRect, 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafileStream(stream, 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, &frameRect, frameUnit, 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Write a metafile to a stream with down-level GDI records 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile( 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN IStream * stream, 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HDC referenceHdc, 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Rect & frameRect, 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfType type = EmfTypeEmfPlusDual, 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR * description = NULL 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMetafile * metafile = NULL; 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipRecordMetafileStreamI(stream, 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov referenceHdc, type, &frameRect, frameUnit, 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov description, &metafile); 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeImage(metafile); 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static Status GetMetafileHeader( 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HMETAFILE hWmf, 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const APMFileHeader * apmFileHeader, 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OUT MetafileHeader * header 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return DllExports::GdipGetMetafileHeaderFromWmf(hWmf, apmFileHeader, header); 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static Status GetMetafileHeader( 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HENHMETAFILE hEmf, 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OUT MetafileHeader * header 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header); 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static Status GetMetafileHeader( 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const WCHAR* filename, 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OUT MetafileHeader * header 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return DllExports::GdipGetMetafileHeaderFromFile(filename, header); 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static Status GetMetafileHeader( 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN IStream * stream, 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OUT MetafileHeader * header 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return DllExports::GdipGetMetafileHeaderFromStream(stream, header); 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status GetMetafileHeader( 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OUT MetafileHeader * header 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) const 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipGetMetafileHeaderFromMetafile( 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (GpMetafile *)nativeImage, 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov header)); 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Once this method is called, the Metafile object is in an invalid state 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // and can no longer be used. It is the responsiblity of the caller to 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // invoke DeleteEnhMetaFile to delete this hEmf. 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov HENHMETAFILE GetHENHMETAFILE() 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov HENHMETAFILE hEmf; 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipGetHemfFromMetafile((GpMetafile *)nativeImage, &hEmf)); 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return hEmf; 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Used in conjuction with Graphics::EnumerateMetafile to play an EMF+ 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // The data must be DWORD aligned if it's an EMF or EMF+. It must be 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // WORD aligned if it's a WMF. 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PlayRecord( 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfPlusRecordType recordType, 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN UINT flags, 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN UINT dataSize, 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const BYTE * data 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) const 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipPlayMetafileRecord( 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (GpMetafile *)nativeImage, 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov recordType, 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags, 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov dataSize, 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov data)); 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // If you're using a printer HDC for the metafile, but you want the 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // metafile rasterized at screen resolution, then use this API to set 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // the rasterization dpi of the metafile to the screen resolution, 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // e.g. 96 dpi or 120 dpi. 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status SetDownLevelRasterizationLimit( 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN UINT metafileRasterizationLimitDpi 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit( 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (GpMetafile *)nativeImage, 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov metafileRasterizationLimitDpi)); 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov UINT GetDownLevelRasterizationLimit() const 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov UINT metafileRasterizationLimitDpi = 0; 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit( 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (GpMetafile *)nativeImage, 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &metafileRasterizationLimitDpi)); 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return metafileRasterizationLimitDpi; 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static UINT Metafile::EmfToWmfBits( 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN HENHMETAFILE hemf, 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN UINT cbData16, 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN LPBYTE pData16, 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT iMapMode = MM_ANISOTROPIC, 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN EmfToWmfBitsFlags eFlags = EmfToWmfBitsFlagsDefault 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return DllExports::GdipEmfToWmfBits( 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov hemf, 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cbData16, 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pData16, 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov iMapMode, 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov eFlags); 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef DCR_USE_NEW_250932 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile(const Metafile &); 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Metafile& operator=(const Metafile &); 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif // !_METAFILE_H 375