zoukankan      html  css  js  c++  java
  • 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()函数

    }



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

  • 相关阅读:
    C# 反射
    WPF之布局
    java网络编程中的BIO,NIO,AIO
    BIO的阻塞
    AttributeView的用法
    将linux文件中的tab更换为空格的三种方法
    安装nginx-ingress控制器,使用
    docker 搭建jenkins
    Manjaro 18.0.1 系统安装后值得看的两篇博客
    github创建自己的项目并进行推送
  • 原文地址:https://www.cnblogs.com/lovelyx/p/4867158.html
Copyright © 2011-2022 走看看