windows程序设计学习笔记-图元文件
来源:互联网 发布:php class命名规范 编辑:程序博客网 时间:2024/06/05 11:37
图元文件
老式图元文件
HDC hdcMeta = CreateMetaFile(NULL);
// …可以向对普通HDC对象那样,在其上调用GDI函数
// GDI函数调用信息存储到图元文件里
// 返回图元文件句柄
HMETAFILE hmf = CloseMetaFile(hdcMeta);
// 把图元文件内容应用于hdc
PlayMetaFile(hdc, hmf);
// 用完后,删除图元文件句柄
DeleteMetaFile(hmf);
typedef struct tagMETAFILEPICT{ LONG mm; LONG xExt; LONG yExt; LONG hMF;}METAFILEPICT;
把老式图元文件和剪切板交互用METAFILEPICT结构。
增强型图元文件
HDC hdcEMF = CreateEnhMetaFile(NULL, NULL, NULL, NULL);
// …可以向对普通HDC对象那样,在其上调用GDI函数
// GDI函数调用信息存储到图元文件里
// 返回图元文件句柄
HENHMETAFILE hemf = CloseEnhMetaFile(hdcEMF);
// 把图元文件内容应用于hdc
PlayEnhMetaFile(hdc, hmf, &rect);
// 用完后,删除图元文件句柄
DeleteEnhMetaFile(hmf);
hmf = GetEnhMetaFile(文件名); // 获取增强型图元文件句柄
typedef struct tagENHMETARECORD{ DWORD iType; DWORD nSize; DWORD dParm[1];}ENHMETARECORD;
图元文件存储格式相关:
图元文件可看成由一系列ENHMETARECORD的块结构组成。
每个块结构由iType类型字段来判断,块结构对应的GDI操作。
每个块结构由nSize来告知此块的大小。
dParm[1]表示这是一个变长段,用来存储与块类型对应的GDI调用信息。
扩展图元文件开头的块是 文件头块。此块的解释见截图。
对于期间创建GDI对象的调用,在dParm部分,开始4字节为此对象ID。从1开始分配。
后面对象选入块,直接用此ID表示选入了对应的对象。
选入的对象是备用对象时,选入块dParm部分为最高位为1的4字节。
// 创建设备环境为增强型图元文件HDC CreateEnhMetaFile( _In_ HDC hdcRef, _In_ LPCTSTR lpFilename, _In_ const RECT *lpRect, _In_ LPCTSTR lpDescription);
参数解释:
hdcRef:参考设备环境句柄。
lpFilename:被创建的增强型图元文件名。
lpRect:以0.01毫米为单位指定的存储在增强型图元文件里图片的维度。
lpDescription:指定创建图片的应用名和图片标题。中间’\0’分隔。结尾两个’\0’。
返回值:
成功,指向增强型图元文件的设备环境句柄。
失败,NULL。
// 枚举增强型图元文件里的记录// 取得每个记录然后把其传递给回调函数// 枚举继续直到处理了最后一个记录或回调函数返回了0BOOL EnumEnhMetaFile( _In_ HDC hdc, _In_ HENHMETAFILE hemf, _In_ ENHMFENUMPROC lpEnhMetaFunc, _In_ LPVOID lpData, _In_ const RECT *lpRect);
参数解释:
hdc:设备环境句柄,会传递给回调函数。
hemf:增强型图元文件句柄
lpEnhMetaFunc:指向回调函数
lpRect:指定图片左上和右下角的逻辑坐标。
返回值:
成功枚举了所有记录,返回0
否则,返回0
// 应用定义的回调函数int CALLBACK EnhMetaFileProc( _In_ HDC hDC, _In_ HANDLETABLE *lpHTable, _In_ const ENHMETARECORD *lpEMFR, _In_ int nObj, _In_ LPARAM lpData);
参数解释:
hdc:设备环境句柄
lpHTable:句柄表。
lpEMFR:图元文件记录。
nObj:句柄表里对象数量。
lpData:指向可选数据。
返回值:
非0,继续枚举
0,停止枚举
BOOL PlayEnhMetaFileRecord( _In_ HDC hdc, _In_ LPHANDLETABLE lpHandletable, _In_ const ENHMETARECORD *lpEnhMetaRecord, _In_ UINT nHandles);
参数解释:前面四个参数含义同EnumMetaFileProc中。
返回值:
成功,非0
失败,0
lpHandletable中第一个元素是图元文件句柄,其余各个元素是在PlayEnhMetaFileRecord中执行对象创建,对象选入,对象删除时进行维护的。
// 拷贝增强型图元文件内容到指定文件HENHMETAFILE CopyEnhMetaFile( _In_ HENHMETAFILE hemfSrc, _In_ LPCTSTR lpszFile);
参数解释:
hemfSrc:要拷贝的增强型图元文件句柄
lpszFile:目的文件名。为NULL,源图元文件被拷贝到内存。
返回值:
成功,拷贝的增强型图元文件句柄。
失败,NULL。
可以对图元文件的生成过程和现实过程使用映射模式,来简化操作。
生成时使用映射模式指的是,把CreateEnhMetaFile返回的设备环境句柄,设置为某个映射模式后,对其调用GDI函数。
显示时使用映射模式指的是,对PlayEnhMetaFile或PlayEnhMetaFile传入的hdc先设置映射模式,并根据映射模式信息设置 显示矩形信心。
- windows程序设计学习笔记-图元文件
- Windows程序设计学习笔记
- MFC Windows程序设计学习笔记--文件和串行化
- 《Windows程序设计》学习笔记(1)
- windows程序设计第一章学习笔记
- VC WINDOWS 程序设计学习笔记
- Windows 程序设计学习笔记1
- Windows程序设计_Chap02_Unicode_学习笔记
- 《Windows 程序设计》学习笔记(一)
- 《Windows 程序设计》学习笔记(二)
- 《Windows 程序设计》学习笔记(三)
- 《Windows 程序设计》学习笔记(四)
- 《Windows 程序设计》学习笔记(五)
- 《windows 程序设计》中的翻译错误----学习笔记
- windows程序设计第二章学习笔记
- 《Windows程序设计》第5章学习笔记
- Windows 程序设计学习笔记(一)
- Windows 程序设计学习笔记二:Unicode
- jzoj 1589. 【普及模拟】洗牌
- eclipse构建maven web项目
- hive与HBase整合
- 排序算法之 —— 希尔排序(四)
- Linux蓝牙系统(3) Linux 命令
- windows程序设计学习笔记-图元文件
- HDFS append: Failed to close file /sys/global/log/sys_20160716.log. Lease recovery is in prog
- 十分推荐的一篇关于CSS浮动的博文
- Vux使用心得
- 欢迎使用CSDN-markdown编辑器
- Html初学之路02
- sublime text3快速生成svg相关结构
- JavaWeb项目使用SQLite数据库,数据文件相对路径
- tomcat 熟知与运用