c++ - 如何在 GDI 中播放元文件

标签 c++ mfc gdi

我对元文件在 GDI 中的实际播放方式很感兴趣。首先,元文件创建时,是否真的包含了函数调用和参数值,所以可以绘制图元?我知道它是用来做 vector 图的,所以这是有道理的…… 第二,meta文件是怎么播放的?实际的元数据是否被绘制,然后以某种方式被 BitBlitted 到 DC,或者立即被绘制到 DC?比方说,如果我使用 FloodFill 来填充图元文件中的某些内容,如果元中的对象与 DC 中绘制的对象相交,是否会出现问题?例如,如果 DC 中的对象填充有 FloodField 中使用的颜色。谢谢。

最佳答案

图元文件非常简单,只是一组记录,这些记录与您为生成它而调用的 GDI 函数相匹配。每条记录都有一个对应于特定 GDI 函数的数字,后面是您传递给该函数的参数值。来自winapi的记录声明:

typedef struct tagENHMETARECORD {
  DWORD iType;
  DWORD nSize;
  DWORD dParm[1];
} ENHMETARECORD, *PENHMETARECORD;

iType 是函数号,nSize 是记录的大小,dParm 存储函数参数值。

因此,当您调用 PlayMetafile() 时,Windows 只是再次调用完全相同的 GDI 函数。您传递的 HDC 参数决定绘图输出的位置。简单易行。

关于c++ - 如何在 GDI 中播放元文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20194185/

相关文章:

c++ - 为什么 CRichEditControl 隐藏单词周围的边框

c# - GDI 整体剪裁范围

gdi - Windows 10 中带有标题栏的模糊窗口? Windows 更新后停止工作

c++ - 多文件游戏中的枚举

C++ lambda,没有看到函数和参数?

c++ - 使用多个头文件和 cpp 文件帮助

mfc - MFC中的消息循环

c++ - 静态常量数组

c++ - MFC 中的全屏窗口

c++ - HBITMAP 添加透明度/alpha channel