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

vc++元文件的保存,保存图形,重绘图形的更多相关文章

  1. 基于jsplumb插件制作可拖拽、保存流程图、重绘保存后的流程图总结

    1.重点参考博文 https://blog.csdn.net/j_bean/article/details/78092647 2.关键点总结 1)实现可视区域图形画满后,拖动整个画布的效果 a.最好不 ...

  2. vc++图像保存,重绘

    新建mfc应用程序,单文档 增加绘图 分别增加命令响应 添加成员变量UINIT 图形可以运行,如何保存呢?(一个集合类,CPtArt) 用一个类的对象来保存一个图形的三个要素 所以插入一个新的类(通常 ...

  3. Windows开发进阶之VC++中如何实现对话框的界面重绘

    技术:Windows 系统+Visual studio 2008   概述 应用程序界面是用户与应用程序之间的交互的桥梁和媒介,用户界面是应用程序中最重要的组成部分,也是最为直观的视觉体现.对用户而言 ...

  4. VC++中关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别

    而OnPaint()是CWnd的类成员,同时负责响应WM_PAINT消息. OnDraw()是CVIEW的成员函数,并且没有响应消息的功能.这就是为什么你用VC成的程序代码时,在视图类只有OnDraw ...

  5. 【转】VC的MFC中重绘函数的使用总结(整理)

    原文网址:http://www.cnblogs.com/x8023z/archive/2008/12/09/mfc33.html 在刷新窗口时经常要调用重绘函数MFC提供了三个函数用于窗口重绘Inva ...

  6. 关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)

    最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结. 效果图: 1.基础配置 options的配置如下: { tooltip: { trigger: 'item', triggerO ...

  7. uCGUI窗口重绘代码分析

    一.概述 µC/GUI的窗口重绘是学习者理解窗口工作原理和应用窗口操作的重点.µC/GUI的窗口重绘引入了回调机制,回调机制可以实现图形系统调用用户的代码,由于图形系统使用了剪切算法,使得屏幕重绘的效 ...

  8. 深入Windows窗体原理及控件重绘技巧

    之前有学MFC的同学告诉我觉得Windows的控件重绘难以理解,就算重绘成功了还是有些地方不明白,我觉得可能很多人都有这样的问题,在这里我从Windows窗体的最基本原理来讲解,如果你有类似的疑惑希望 ...

  9. MFC 窗口重绘问题

    在客户区画直线等图形时, 发现当其最小化或者其他窗口遮挡时,出现窗口重绘,而将原来绘制的图形删除,上网上搜索知道,绘制图形的代码必须放置在Ondraw函数中,才能避免重绘时图形消失(因为一直在响应WM ...

随机推荐

  1. 3.在eclipse中创建Web项目,并部署到Tomcat上

    1.找到创建web项目的菜单 2.创建web项目并选择web环境 3.查看创建好的web项目结构 4.在web项目的webContent文件夹下创建jsp页面 5.查看是否创建jsp页面成功,并编辑j ...

  2. 使用VS Code断点调试PHP

    vs code 使用一款杰出的轻量级代码编辑器,其中的插件工具不胜枚举而且还在不断增加.使用 vs code 调试 php 代码更是方便简洁,下面我们来一起看一下. 1. 安装 XDebug 扩展 调 ...

  3. 学习EXTJS6(5)基本功能-进度条组件

    Ext.ProgressBar有二种模式:手动和自动:手动:自己控制显示.进度.更新.清除.自动只需要调用Wait方法即可. 配置项:   配置项 类型 说明 renderTo String 指定页面 ...

  4. 洛谷 P2144 BZOJ 1003 [FJOI2007]轮状病毒

    题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间的信息通道,如图1. n轮状病毒的产生规律 ...

  5. HDU 4507

    数位DP. 一般是利用DFS来求数位DP了,结合了记忆化搜索.设dp[i][j][k]为前i位,并且前i位的数位和mod7为j,前i位的数字的表示数字值mod7.为什么可以这样呢?因为继续DFS下去, ...

  6. cocos2d-android学习四 ---- 精灵的创建

    上篇文章我们创建了一个黑乎乎的界面.以下我们就给它增加一个精灵. 我们这次就一起来学习精灵的基础知识. 1.什么是精灵 游戏中全部会动的对象都是精灵,能够是主人公,背景元素,一个子弹或者是敌人. 一个 ...

  7. 学习日记之原型模式和Effective C++

    原型模式(Prototype):用原型实例制定创建对象的种类,而且听过拷贝这些原型创建新的对象. 浅复制:假设字段是值类型的,则对该字段运行逐位复制.假设字段是引用类型.则复制引用但不复制引用的对象. ...

  8. 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)

    使用vector容器,即避免不了进行查找,所以今天就罗列一些stl的find算法应用于vector中. find() Returns an iterator to the first element ...

  9. Linux开发环境搭建与使用——Linux必备软件之Samba

    假如我们是在ubuntu环境上做对应的开发.有的时候,我们须要把我们写的程序共享给别人,或者,自己拷贝出来备份一份.我们习惯用U盘拷贝,假设须要频繁拷贝的话,这样会不太方便.这里给大家介绍一种更好的方 ...

  10. The current .NET SDK does not support targeting .NET Core 2.1. Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.1.

    C:\Program Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInferenc ...