MFC三种不同方式实现图形的保存和重绘---方法二: 运用CMetaFileDC

在OnButtonUp()函数中的代码

//选中透明画刷

CBrush* brush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

m_mfDc.SelectObject(brush); //m_mfDc为CMetaFileDC对象,全局的

//通过m_mfDc绘图
switch(m_gType)
{
case 1:
m_mfDc.SetPixel(point,RGB(255,0,0));
break;
case 2:
m_mfDc.MoveTo(m_pOrigin);
m_mfDc.LineTo(point);
break;
case 3:
m_mfDc.Rectangle(CRect(m_pOrigin,point));
break;
case 4:
m_mfDc.Ellipse(CRect(m_pOrigin,point));
break;
}

Invalidate();//这里重绘将显示图像    去掉这个的话 你画图时不会显示你所画的图形


在OnDraw()函数中的代码


        HMETAFILE hmtfile;  //先建一个HMETAFILE句柄
hmtfile=m_mfDc.Close();    //关闭DC并且将Close()的返回值保存到hmtfile对象中
pDC->PlayMetaFile(hmtfile); //用本地DC播放hmtfile
m_mfDc.Create();  //创建一个空的元文件 以便接下来绘图
m_mfDc.PlayMetaFile(hmtfile);//播放上次所绘的元文件句柄 ,以便保存上次所绘图形
DeleteMetaFile(hmtfile); //删除元文件资源,返回值为BOOL


//关联Menu菜单上的保存和打开菜单项实现点击事件

OnFileSave()  //保存MetaFile文件
{
HMETAFILE hmtfile;
hmtfile=m_mfDc.Close();
CopyMetaFile(hmtfile,"lxx.wmf");
m_mfDc.Create();
DeleteMetaFile(hmtfile);

}


OnFileOpen()  //打开MetaFile文件
{
HMETAFILE hmtfile;
hmtfile=GetMetaFile("lxx.wmf");
m_mfDc.PlayMetaFile(hmtfile);
DeleteMetaFile(hmtfile);

Invalidate();//这里重绘将显示图像  调用OnDraw()函数

}



版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/lovelyx/p/4867158.html

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值