Embed:
(wiki syntax)
Show/hide line numbers
gdiplusmetafile.h
00001 /* 00002 * gdiplusmetafile.h 00003 * 00004 * GDI+ Metafile class 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Markus Koenig <markus@stber-koenig.de> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __GDIPLUS_METAFILE_H 00024 #define __GDIPLUS_METAFILE_H 00025 #if __GNUC__ >=3 00026 #pragma GCC system_header 00027 #endif 00028 00029 #ifndef __cplusplus 00030 #error "A C++ compiler is required to include gdiplusmetafile.h." 00031 #endif 00032 00033 class Metafile: public Image 00034 { 00035 public: 00036 static UINT EmfToWmfBits(HENHMETAFILE hEmf, 00037 UINT cbData16, LPBYTE pData16, 00038 INT iMapMode = MM_ANISOTROPIC, 00039 EmfToWmfBitsFlags eFlags = EmfToWmfBitsFlagsDefault) 00040 { 00041 return DllExports::GdipEmfToWmfBits(hEmf, 00042 cbData16, pData16, iMapMode, eFlags); 00043 } 00044 static Status GetMetafileHeader(const WCHAR *filename, 00045 MetafileHeader *header) 00046 { 00047 return DllExports::GdipGetMetafileHeaderFromFile( 00048 filename, header); 00049 } 00050 static Status GetMetafileHeader(IStream *stream, MetafileHeader *header) 00051 { 00052 return DllExports::GdipGetMetafileHeaderFromStream( 00053 stream, header); 00054 } 00055 ////TODO: Metafile::GetMetafileHeader 00056 //static Status GetMetafileHeader(HMETAFILE hWmf, 00057 // const WmfPlaceableFileHeader *wmfPlaceableFileHeader, 00058 // MetafileHeader *header) 00059 //{ 00060 // // WTF: No flat API to do this. 00061 // return NotImplemented; 00062 //} 00063 static Status GetMetafileHeader(HENHMETAFILE hEmf, 00064 MetafileHeader *header) 00065 { 00066 return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header); 00067 } 00068 00069 Metafile(HMETAFILE hWmf, 00070 const WmfPlaceableFileHeader *wmfPlaceableFileHeader, 00071 BOOL deleteWmf = FALSE): Image(NULL, Ok) 00072 { 00073 GpMetafile *nativeMetafile = NULL; 00074 lastStatus = DllExports::GdipCreateMetafileFromWmf( 00075 hWmf, deleteWmf, wmfPlaceableFileHeader, 00076 &nativeMetafile); 00077 nativeImage = nativeMetafile; 00078 } 00079 Metafile(HENHMETAFILE hEmf, BOOL deleteEmf = FALSE): Image(NULL, Ok) 00080 { 00081 GpMetafile *nativeMetafile = NULL; 00082 lastStatus = DllExports::GdipCreateMetafileFromEmf( 00083 hEmf, deleteEmf, &nativeMetafile); 00084 nativeImage = nativeMetafile; 00085 } 00086 Metafile(const WCHAR *filename): Image(NULL, Ok) 00087 { 00088 GpMetafile *nativeMetafile = NULL; 00089 lastStatus = DllExports::GdipCreateMetafileFromFile( 00090 filename, &nativeMetafile); 00091 nativeImage = nativeMetafile; 00092 } 00093 Metafile(const WCHAR *filename, 00094 const WmfPlaceableFileHeader *wmfPlaceableFileHeader): 00095 Image(NULL, Ok) 00096 { 00097 GpMetafile *nativeMetafile = NULL; 00098 lastStatus = DllExports::GdipCreateMetafileFromWmfFile( 00099 filename, wmfPlaceableFileHeader, 00100 &nativeMetafile); 00101 nativeImage = nativeMetafile; 00102 } 00103 Metafile(IStream *stream): Image(NULL, Ok) 00104 { 00105 GpMetafile *nativeMetafile = NULL; 00106 lastStatus = DllExports::GdipCreateMetafileFromStream( 00107 stream, &nativeMetafile); 00108 nativeImage = nativeMetafile; 00109 } 00110 Metafile(HDC referenceHdc, EmfType type = EmfTypeEmfPlusDual, 00111 const WCHAR *description = NULL): Image(NULL, Ok) 00112 { 00113 GpMetafile *nativeMetafile = NULL; 00114 lastStatus = DllExports::GdipRecordMetafile( 00115 referenceHdc, type, NULL, MetafileFrameUnitGdi, 00116 description, &nativeMetafile); 00117 nativeImage = nativeMetafile; 00118 } 00119 Metafile(HDC referenceHdc, const RectF& frameRect, 00120 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 00121 EmfType type = EmfTypeEmfPlusDual, 00122 const WCHAR *description = NULL): Image(NULL, Ok) 00123 { 00124 GpMetafile *nativeMetafile = NULL; 00125 lastStatus = DllExports::GdipRecordMetafile( 00126 referenceHdc, type, &frameRect, frameUnit, 00127 description, &nativeMetafile); 00128 nativeImage = nativeMetafile; 00129 } 00130 Metafile(HDC referenceHdc, const Rect& frameRect, 00131 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 00132 EmfType type = EmfTypeEmfPlusDual, 00133 const WCHAR *description = NULL): Image(NULL, Ok) 00134 { 00135 GpMetafile *nativeMetafile = NULL; 00136 lastStatus = DllExports::GdipRecordMetafileI( 00137 referenceHdc, type, &frameRect, frameUnit, 00138 description, &nativeMetafile); 00139 nativeImage = nativeMetafile; 00140 } 00141 Metafile(const WCHAR *filename, HDC referenceHdc, 00142 EmfType type = EmfTypeEmfPlusDual, 00143 const WCHAR *description = NULL): Image(NULL, Ok) 00144 { 00145 GpMetafile *nativeMetafile = NULL; 00146 lastStatus = DllExports::GdipRecordMetafileFileName( 00147 filename, referenceHdc, type, NULL, 00148 MetafileFrameUnitGdi, description, 00149 &nativeMetafile); 00150 nativeImage = nativeMetafile; 00151 } 00152 Metafile(const WCHAR *filename, HDC referenceHdc, 00153 const RectF& frameRect, 00154 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 00155 EmfType type = EmfTypeEmfPlusDual, 00156 const WCHAR *description = NULL): Image(NULL, Ok) 00157 { 00158 GpMetafile *nativeMetafile = NULL; 00159 lastStatus = DllExports::GdipRecordMetafileFileName( 00160 filename, referenceHdc, type, &frameRect, 00161 frameUnit, description, &nativeMetafile); 00162 nativeImage = nativeMetafile; 00163 } 00164 Metafile(const WCHAR *filename, HDC referenceHdc, 00165 const Rect& frameRect, 00166 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 00167 EmfType type = EmfTypeEmfPlusDual, 00168 const WCHAR *description = NULL): Image(NULL, Ok) 00169 { 00170 GpMetafile *nativeMetafile = NULL; 00171 lastStatus = DllExports::GdipRecordMetafileFileNameI( 00172 filename, referenceHdc, type, &frameRect, 00173 frameUnit, description, &nativeMetafile); 00174 nativeImage = nativeMetafile; 00175 } 00176 Metafile(IStream *stream, HDC referenceHdc, 00177 EmfType type = EmfTypeEmfPlusDual, 00178 const WCHAR *description = NULL): Image(NULL, Ok) 00179 { 00180 GpMetafile *nativeMetafile = NULL; 00181 lastStatus = DllExports::GdipRecordMetafileStream( 00182 stream, referenceHdc, type, NULL, 00183 MetafileFrameUnitGdi, description, 00184 &nativeMetafile); 00185 nativeImage = nativeMetafile; 00186 } 00187 Metafile(IStream *stream, HDC referenceHdc, const RectF& frameRect, 00188 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 00189 EmfType type = EmfTypeEmfPlusDual, 00190 const WCHAR *description = NULL): Image(NULL, Ok) 00191 { 00192 GpMetafile *nativeMetafile = NULL; 00193 lastStatus = DllExports::GdipRecordMetafileStream( 00194 stream, referenceHdc, type, &frameRect, 00195 frameUnit, description, &nativeMetafile); 00196 nativeImage = nativeMetafile; 00197 } 00198 Metafile(IStream *stream, HDC referenceHdc, const Rect& frameRect, 00199 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, 00200 EmfType type = EmfTypeEmfPlusDual, 00201 const WCHAR *description = NULL): Image(NULL, Ok) 00202 { 00203 GpMetafile *nativeMetafile = NULL; 00204 lastStatus = DllExports::GdipRecordMetafileStreamI( 00205 stream, referenceHdc, type, &frameRect, 00206 frameUnit, description, &nativeMetafile); 00207 nativeImage = nativeMetafile; 00208 } 00209 virtual ~Metafile() 00210 { 00211 } 00212 virtual Metafile* Clone() const 00213 { 00214 GpImage *cloneImage = NULL; 00215 Status status = updateStatus(DllExports::GdipCloneImage( 00216 nativeImage, &cloneImage)); 00217 if (status == Ok) { 00218 Metafile *result = new Metafile(cloneImage, lastStatus); 00219 if (!result) { 00220 DllExports::GdipDisposeImage(cloneImage); 00221 lastStatus = OutOfMemory; 00222 } 00223 return result; 00224 } else { 00225 return NULL; 00226 } 00227 } 00228 00229 ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus 00230 //Status ConvertToEmfPlus(const Graphics *refGraphics, 00231 // BOOL *conversionSuccess = NULL, 00232 // EmfType emfType = EmfTypeEmfPlusOnly, 00233 // const WCHAR *description = NULL) 00234 //{ 00235 // // FIXME: can't test GdipConvertToEmfPlus because it isn't exported in 1.0 00236 // return updateStatus(DllExports::GdipConvertToEmfPlus( 00237 // refGraphics ? refGraphics->nativeGraphics : NULL, 00238 // (GpMetafile*) nativeImage, 00239 // conversionSuccess, emfType, description, ???)); 00240 //} 00241 ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus 00242 //Status ConvertToEmfPlus(const Graphics *refGraphics, 00243 // const WCHAR *filename, 00244 // BOOL *conversionSuccess = NULL, 00245 // EmfType emfType = EmfTypeEmfPlusOnly, 00246 // const WCHAR *description = NULL) 00247 //{ 00248 // // FIXME: can't test GdipConvertToEmfPlusToFile because it isn't exported in 1.0 00249 // return updateStatus(DllExports::GdipConvertToEmfPlusToFile( 00250 // refGraphics ? refGraphics->nativeGraphics : NULL, 00251 // (GpMetafile*) nativeImage, conversionSuccess, 00252 // filename, emfType, description, ???)); 00253 //} 00254 ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus 00255 //Status ConvertToEmfPlus(const Graphics *refGraphics, 00256 // IStream *stream, 00257 // BOOL *conversionSuccess = NULL, 00258 // EmfType emfType = EmfTypeEmfPlusOnly, 00259 // const WCHAR *description = NULL) 00260 //{ 00261 // // FIXME: can't test GdipConvertToEmfPlusToStream because it isn't exported in 1.0 00262 // return updateStatus(DllExports::GdipConvertToEmfPlusToStream( 00263 // refGraphics ? refGraphics->nativeGraphics : NULL, 00264 // (GpMetafile*) nativeImage, conversionSuccess, 00265 // stream, emfType, description, ???)); 00266 //} 00267 UINT GetDownLevelRasterizationLimit() const 00268 { 00269 UINT result = 0; 00270 updateStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit( 00271 (GpMetafile*) nativeImage, &result)); 00272 return result; 00273 } 00274 HENHMETAFILE GetHENHMETAFILE() 00275 { 00276 HENHMETAFILE result = NULL; 00277 updateStatus(DllExports::GdipGetHemfFromMetafile( 00278 (GpMetafile*) nativeImage, &result)); 00279 return result; 00280 } 00281 Status GetMetafileHeader(MetafileHeader *header) const 00282 { 00283 return updateStatus(DllExports::GdipGetMetafileHeaderFromMetafile( 00284 (GpMetafile*) nativeImage, header)); 00285 } 00286 Status PlayRecord(EmfPlusRecordType recordType, UINT flags, 00287 UINT dataSize, const BYTE *data) const 00288 { 00289 return updateStatus(DllExports::GdipPlayMetafileRecord( 00290 (GpMetafile*) nativeImage, 00291 recordType, flags, dataSize, data)); 00292 } 00293 Status SetDownLevelRasterizationLimit(UINT limitDpi) 00294 { 00295 return updateStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit( 00296 (GpMetafile*) nativeImage, limitDpi)); 00297 } 00298 00299 private: 00300 Metafile(GpImage *image, Status status): Image(image, status) {} 00301 Metafile(const Metafile&); 00302 Metafile& operator=(const Metafile&); 00303 }; 00304 00305 #endif /* __GDIPLUS_METAFILE_H */
Generated on Tue Jul 12 2022 19:59:54 by
1.7.2