• 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()函数

    }



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

  • 相关阅读:
    快速幂取模
    程序人生系列之新闻发布系统 0105
    JavaWeb之博客系统(四)
    [转]树状数组
    题目:免费午餐
    题目:删数问题
    题目:三元组
    题目:分子团
    题目:[汪老师结婚]婚礼上的袭击
    题目:[SBN号码]
  • 原文地址:https://www.cnblogs.com/lovelyx/p/4867158.html
Copyright © 2020-2023  润新知