• MFC三种不同方式实现图形的保存和重绘---方法一:通过集合类CPtrArray保存点的坐标



     //方法一:通过集合类CPtrArray保存点的坐标


    响应WM_LBUTTONUP消息 在OnButtonUp()函数的代码

    CClientDC dc(this);

     //获得透明画刷并选中

    CBrush* brush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    dc.SelectObject(brush);

    //根据不同类型绘制点、直线、矩形、椭圆
    switch(m_gType)
    {
    case 1:
    dc.SetPixel(point,RGB(255,0,0));
    break;
    case 2:
    dc.MoveTo(m_pOrigin);     //m_pOrigin为起始点坐标
    dc.LineTo(point);
    break;
    case 3:
    dc.Rectangle(CRect(m_pOrigin,point));
    break;
    case 4:
    dc.Ellipse(CRect(m_pOrigin,point));
    break;
    }
    //为了处理滚动条窗口在重绘时最下端的图形会出现偏移的情况
    OnPrepareDC(&dc); //调整显示上下文的属性  
    //将设备点转换成逻辑点
    dc.DPtoLP(&m_pOrigin);
    dc.DPtoLP(&point);

    //保存数据 到CGraphic类中
    CGraphic* graph=new CGraphic(m_gType,m_pOrigin,point); //CGraphic 是一个自定义的类 有三个成员变量 分别表示 图形类型、起点、终点

    m_ptrArray.Add(graph); //将CGraphic对象添加到CPtrArray集合类对象中保存起来



    响应WM_PAINT消息  在OnDraw()函数的代码


    //创建透明画刷并且选中
    CBrush* brush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    pDC->SelectObject(brush);

    //通过循环将集合类对象中保存的点坐标取出
    for(int i=0;i<m_ptrArray.GetSize();i++)
    {
    switch(((CGraphic*)m_ptrArray.GetAt(i))->m_gType)
    {
    case 1:
    pDC->SetPixel(((CGraphic*)m_ptrArray.GetAt(i))->m_pEnd,RGB(255,0,0));
    break;
    case 2:
    pDC->MoveTo(((CGraphic*)m_ptrArray.GetAt(i))->m_pOrigin );
    pDC->LineTo(((CGraphic*)m_ptrArray.GetAt(i))->m_pEnd);
    break;
    case 3:
    pDC->Rectangle(CRect(((CGraphic*)m_ptrArray.GetAt(i))->m_pOrigin,((CGraphic*)m_ptrArray.GetAt(i))->m_pEnd));
    break;
    case 4:
    pDC->Ellipse(CRect(((CGraphic*)m_ptrArray.GetAt(i))->m_pOrigin,((CGraphic*)m_ptrArray.GetAt(i))->m_pEnd));
    break;
    }
    }
    */

     

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

  • 相关阅读:
    代码走读 airflow 2
    sql 查询相关
    控制你的鼠标和键盘
    TODO
    二进制流的操作收集
    daterangepicker-双日历
    datetimepicker使用
    ADO执行事务
    动态添加表sql
    执行带返回值的存储过程
  • 原文地址:https://www.cnblogs.com/lovelyx/p/4867159.html
Copyright © 2020-2023  润新知