一、元文件。
由一系列与图形函数调用等价的二进制记录组成,这些记录一般用于绘制直线、曲线、区域、文本等。
二、“画图程序”创建位图,“绘图程序”创建元文件。
元文件比位图占空间少,而且比位图更加设备无关。
三、老式元文件格式。扩展名为.WMF
HDC hdcMeta = CreateMetaFile( LPCTSTR lpszFile // file name);
//创建元文件,保存在file路径里,扩展名为.WMF
//如果参数为NULL,创建在内存中,
Ellipse(hdcMeta,0,0,100,100);//然后用hdcMeta绘图。
HMETAFILE hmf = CloseMetaFile(hdcMeta);//关闭,得到句柄
PlayMetaFile(hdc,hmf);//在hdc上,绘制hmf
DeleteMetaFile(hmf);
hmf = GetMetaFile(filename);//读取元文件。
GetDeviceCaps(hmf,HORZSIZE);//这类的GetDeviceCaps函数可以获得元文件属性。
HENHMETAFILE CopyEnhMetaFile( HENHMETAFILE hemfSrc, LPCTSTR lpszFile);//拷贝到 lpszFile,为空到内存
元文件可以作为用户自定义资源:SetMetaFileBitsEx
四、增强型元文件,扩展名为.EMF
HDC hdcMeta = CreateEnhMetaFile(
HDC hdcRef, // handle to reference DC
LPCTSTR lpFilename, // file name
CONST RECT *lpRect, // bounding rectangle
LPCTSTR lpDescription // description string
);
//创建元文件,保存在file路径里,扩展名为.EMF
//如果参数为NULL,创建在内存中,
Ellipse(hdcMeta,0,0,100,100);//然后用hdcMeta绘图。
HMETAFILE hmf = CloseEnhMetaFile(hdcMeta);//关闭,得到句柄
PlayEnhMetaFile(hdc,hmf,&rect);//在hdc上,绘制hmf,并缩放到RECT范围内
DeleteEnhMetaFile(hmf);
GetMetaFile(filename);//读取元文件。
元文件可以作为用户自定义资源:SetMetaFileBitsEx
增强型元文件比老式元文件最大的改进是增加了文件头信息。
获取文件头信息:UINT GetEnhMetaFileHeader( HENHMETAFILE hemf, // handle to enhanced metafile UINT cbBuffer, // size of buffer LPENHMETAHEADER emh // data buffer);
cxImage = emh.rclBounds.right - emh.rclBounds.left ;//元文件长
cyImage = emh.rclBounds.bottom - emh.rclBounds.top ;//元文件宽
枚举 BOOL EnumEnhMetaFile( HDC hdc, // handle to DC HENHMETAFILE hemf, // handle to enhanced metafile ENHMFENUMPROC lpEnhMetaFunc, // callback function LPVOID lpData, // callback-function data CONST RECT *lpRect); // bounding rectangle
//对元文件里面的每个对象,执行 lpEnhMetaFunc 函数里的操作。
五、元文件数据格式。
跟一般的文件一样。十六进制:对象类型,类型长度,类型内容。
类型定义可查看MSDN:EMR....