• vc++元文件的保存,保存图形,重绘图形


    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传过来

  • 相关阅读:
    test!
    Visual Studio 中的单元测试 UNIT TEST
    Jquery结合div+css实现文字间断停顿向上滚动效果
    asp.net中使用HttpWebRequest发送上传文件
    分享一个可以灵活控制的实现Javascript滚动效果的程序
    VeryCodes.Log让日志记录和读取变的更简单
    实现MyXLS设置行高的功能
    设计模式学习笔记建造者模式
    设计模式学习笔记原型模式
    设计模式学习笔记模板方法
  • 原文地址:https://www.cnblogs.com/fanglijiao/p/10029643.html
Copyright © 2020-2023  润新知