孙鑫 第十一课之二 CMetaFileDC 重绘/保存图形

1 绘图

void CMy58View::OnLButtonUp(UINT nFlags, CPoint point) 

{

    // TODO: Add your message handler code here and/or call default

    CClientDC dc(this);

    CPen pen(PS_SOLID, 50, RGB(0, 0, 255));

    CPen *oldPen = NULL;

    CBrush *brush = NULL;

    CBrush *oldBrush = NULL;

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

    dcMetaFile.SelectObject(&pen);

    dcMetaFile.SelectObject(brush);

    switch (m_nDrawType)

    {

    case  1:

        dcMetaFile.SetPixel(point, RGB(0, 0, 255));

        break;

    case 2:

        dcMetaFile.MoveTo(pointOriginal);

        dcMetaFile.LineTo(point);

        break;

    case 3:

        dcMetaFile.Rectangle(&CRect(pointOriginal, point));

        break;

    case 4:

        dcMetaFile.Ellipse(&CRect(pointOriginal, point));

        break;

    }

    CScrollView::OnLButtonUp(nFlags, point);

}

///

2 重绘

void CMy58View::OnDraw(CDC* pDC)

{

    CMy58Doc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

    HMETAFILE hMetaFile; //句柄

    hMetaFile = dcMetaFile.Close(); //关闭以获得该句柄

    pDC->PlayMetaFile(hMetaFile); //播放该句柄对应的图形

    dcMetaFile.Create(); //创建Windows图元文件设备上下文,并将其附加给CMetaFileDC对象

    dcMetaFile.PlayMetaFile(hMetaFile);//将上次的绘图操作保存到该CMetaFileDC对象关联的新的内存块中

    DeleteMetaFile(hMetaFile);//释放句柄

}

///
3 保存

void CMy58View::OnFileSave() 

{

    // TODO: Add your command handler code here

    HMETAFILE hMetaFile;

    hMetaFile = dcMetaFile.Close();  //Close后返回句柄

    CopyMetaFile(hMetaFile, "file.mf");  //以file.mf为文件名保存

    dcMetaFile.Create(); //Close 和 Create对应

    DeleteMetaFile(hMetaFile); //释放

}

///
4 打开

void CMy58View::OnFileOpen() 

{

    // TODO: Add your command handler code here

    HMETAFILE hMetaFile;

    hMetaFile = GetMetaFile("file.mf");  //获得文件名为file.mf的metafile,返回句柄

    dcMetaFile.PlayMetaFile(hMetaFile); //播放该文件

    DeleteMetaFile(hMetaFile); //释放句柄

    Invalidate();  //窗口重绘 进入OnDraw函数, 从而重绘,( 见 2重绘)

}

 

孙鑫 第十一课之二 CMetaFileDC 重绘/保存图形 - 大灰狼 - 大灰狼 的博客?

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值