1, CMateFileDC
可以用来多次打开自己的画布,这个元文件包含许多接口的命令
当绘制好之后可以用来播放元文件
首先,创建一个CMateFileDC的元文件对象
然后调用Create原函数,创建一个windows文件设备上下文,将CMateFileDC对象关联起来
下一步,给CMateFileDC对象发送一系列CDC GDI的命令,仅仅moveto,lineto的那些GDI的命令能使用
在想要发送命令之后,调用close命令函数来关闭元文件的设备上下文,返回原文件的句柄,
然后,处理CMateFileDC对象
在playmatefile中播放源文件
增加一个成员变量
调用create方法,可以为原文件指定一个文件名,如果文件名为空,创建一个新的文件(是一个内存元源文件)
将透明画刷选择到元文件当中,将onlbuttonup中的case语句中的dc换成元文件中的dc
发送gdi返回一个原文件句柄,返回hmetafile类型
注释+定义hmetafile
播放原文件
准备元文件的设备上下文,需要将他在原文件dc中绘制,所以再次调用create创建元文件,然后将他与元文件dc关联起来,句柄播放结束便不再需要了,用delete删除源文件(但先前绘制的图形不在了)
如何还能把先前的元文件播放,可以在新的gdi函数中绘制图形
窗口尺寸改变的时候才能看到
为文件菜单中的打开,保存增加命令响应(添加了两个)
编辑代码,保存元文件用CopyMetaFile,拷贝windows元文件到指定文件
定义一个句柄,再调用CopyMetaFile(有两个参数,一个是windows元文件,一个是文件名)
拷贝之后,重新创建一个元文件,以便下一次绘图
对句柄来说元文件不需要了,删掉
打开
用到GetMetaFile函数,得到增强型元文件
1,先从保存的原文件当中得到句柄
2,有了句柄之后用PlayMetaFile播放,元文件输出的命令就被记录下来了,句柄就没有用了
3,删除
4,调用Invalidate()引起窗口的重画
窗口重画会调用ondraw函数,就会播放原文件了
(这样的保存并不是保存图形的数据,而是图形的命令)
也可以利用兼容dc保存图形,然后利用ondraw函数将兼容dc保存的图形拷贝到目的函数中
增加成员变量
判断这个dc是否创建,若没创建,就创建一个和当前dc兼容
当前的大小与客户区的是一致的,利用兼容位图完成,要先创建兼容位图
将这个位图选进
将透明画刷选到兼容dczhong
改写。case语句都利用兼容dc
ondraw中的注释
利用兼容dc
拷贝到目的dc,先定义,再调用
运行,窗口尺寸变化时却》》。。
因为还需要调用BitBlt
在选择位图之后调用
(这是利用兼容dc进行窗口重绘)运行时,切换窗口才能看到画的图
但是调试时,只要动窗口图像就会发生变化(变成了黑色,这是因为绘制图形时,颜色没有传过来)之前画笔是在pen中,现在绘制时添加过来
查看pen,改变颜色的在哪里?
修改如下:把pen传过来