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

    }



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

  • 相关阅读:
    Poj(1703),种类并查集
    Poj(2236),简单并查集
    Poj (3239),m皇后问题
    Poj(1521),哈夫曼编码
    NYOJ(680),摘枇杷,(暴力,或者二分搜索)
    NYOJ(42)欧拉图
    数集合有多少个TOJ(2469)
    HDU(1016),打素数环
    HDU(4394),数论上的BFS
    Poj(2225),三维BFS
  • 原文地址:https://www.cnblogs.com/lovelyx/p/4867158.html
Copyright © 2011-2022 走看看