zoukankan      html  css  js  c++  java
  • 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;
    }
    }
    */

     

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

  • 相关阅读:
    .NET Web应用配置本地IIS(实现Visual Studio离线运行与调试)
    Windows10 IIS Web服务器安装配置
    Visual Studio 2022 Preview设置简体中文
    nlp中各中文预训练模型的输入和输出
    numpy和Pytorch对应的数据类型
    Zookeeper入门看这篇就够了
    做一个有温度的程序员
    Apollo 配置中心详细教程
    浅析 DDD 领域驱动设计
    把之前CompletableFuture留下的坑给填上。
  • 原文地址:https://www.cnblogs.com/lovelyx/p/4867159.html
Copyright © 2011-2022 走看看