zoukankan      html  css  js  c++  java
  • 让CDC输出的图形具有保持功能的三种方法2

      本篇继续写我的笔记,上一篇中介绍了CDC输出的图形具有保持功能,只介绍了一种方法(最常见的绘图数据保存,然后重绘), 这次介绍第二种方法,

    该方法主要是利用元数据文件的形式来保存用户绘制过的图形,它的思路很简单:

      

    利用元数据来保持功能用户绘制过的图形思路:

      每次采用元数据文件DC用户手动绘制完图形以后, 都会保存至元数据文件中,当以后窗体重绘时使用当前DC来重新播放该元数据文件一样,来达到图形保持功能,它就好比在看电影中的回放功能一样。

      

      大致地附上一些主要的代码:

    首先利用了元数据文件DC来进行绘图。

    void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) 
    {
        
    // TODO: Add your message handler code here and/or call default
        CClientDC dc(this);
        CBrush 
    *ptBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
        dc.SelectObject(ptBrush);
     
            
    //m_metaFileDC是一个CMetaFileDC类型的成员变量
        m_metaFileDC.SelectObject(ptBrush);  

            
    //得用元数据文件DC绘制图形
        switch(m_nDrawType)
        {
            
    case 1:
                m_metaFileDC.SetPixel(point,RGB(
    0,0,0));
                
    break;
            
    case 2:
                m_metaFileDC.LineTo(m_ptOrigin);
                m_metaFileDC.MoveTo(point);
                
    break;
            
    case 3:
                m_metaFileDC.Rectangle(CRect(m_ptOrigin,point));
                
    break;
            
    case 4:
                m_metaFileDC.Ellipse(CRect(m_ptOrigin,point));
                
    break;
        }
        CScrollView::OnLButtonUp(nFlags, point);
    }


       当窗体重绘时,得用已得到的元数据文件DC来重新绘制图形,代码如下:

    代码
    void CGraphicView::OnDraw(CDC* pDC)
    {
        CGraphicDoc
    * pDoc = GetDocument();
        ASSERT_VALID(pDoc);

            
    //关闭元数据文件以得到它的句柄
        HMETAFILE hmetaFile;
        hmetaFile 
    = m_metaFileDC.Close();
            
    //播放元数据文件
        pDC->PlayMetaFile(hmetaFile);
        m_metaFileDC.Create();
            
    //保存上一次的元数据文件
        m_metaFileDC.PlayMetaFile(hmetaFile);
        DeleteMetaFile(hmetaFile);

    }

       windows元数据文件它可以包含一系列的GDI绘图命令,我们可以重新播放这些已包含的命令来绘制想要的图形或者文本。当元数据文件不再需要时,应该调用

    DeleteMetaFile来删除元数据文件。

    Author:repository
    From:  http://repository.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/repository/p/1880579.html
Copyright © 2011-2022 走看看