Windows程序设计 读书笔记 - 元文件

一、元文件。

  由一系列与图形函数调用等价的二进制记录组成,这些记录一般用于绘制直线、曲线、区域、文本等。

 

二、“画图程序”创建位图,“绘图程序”创建元文件。

  元文件比位图占空间少,而且比位图更加设备无关。

 

三、老式元文件格式。扩展名为.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....

posted @ 2010-04-30 11:21  傲衣华少  阅读(520)  评论(0编辑  收藏  举报