mfc 写的画折线函数

今天写完画扇形的函数之后,又写了画折线的函数,只要正确传参,就可以用。纵轴的大小可以自动伸缩,x轴的到没有考虑

太晚了,就写到这吧

//画折线图        //记录坐标的三个顶点,原点,最右边的点,最上边的点   数据   横坐标      max是数据中最大的数    //句柄
void drawLine(CPoint * pointArr,double *data,CString *strL,int n ,CPaintDC *dc,double max)
{
     max*=1.2;
        double x,y,interX,interY,lenX,lenY/*有效的坐标长度*/;
  interX=(pointArr[2].x-20-pointArr[1].x)/(n+2);// x坐标的间隔
  interY=(pointArr[1].y-pointArr[0].y-10)/(n+5);
  lenY=pointArr[1].y;
  lenX=n*interX;
 
  int eachPie=lenY/max;//纵轴 单位一的长度
  int tt=1; 
  dc->MoveTo(pointArr[1]);
  dc->LineTo(pointArr[0]);
  dc->MoveTo(pointArr[1]);
  dc->LineTo(pointArr[2]);
        for(x=pointArr[1].x,y=pointArr[1].y;tt<=n+2;tt++)
  {
   
   dc->MoveTo(x,y);
   dc->LineTo(x+interX,y);

   dc->MoveTo(x+interX,y);
   dc->LineTo(x+interX,y-10);
   if(tt<=n)
              dc->TextOut(x+interX,y,strL[tt]);
   

   x+=interX;
  }
       /*画x箭头*/
  dc->MoveTo(pointArr[2].x-5,pointArr[2].y-5);
  dc->LineTo(pointArr[2].x,pointArr[2].y);
  dc->MoveTo(pointArr[2].x,pointArr[2].y);
  dc->LineTo(pointArr[2].x-5,pointArr[2].y+5);
        dc->TextOut(pointArr[2].x-30,pointArr[2].y+20,"month");

  /**画y轴*/
  int t=1;
  for(x=pointArr[1].x,y=pointArr[1].y;t<n+5;t++)
  {
            dc->MoveTo(x,y);
   dc->LineTo(x,y-interY);

   dc->MoveTo(x,y-interY);
   dc->LineTo(x+10,y-interY);
   CString numStr;
   numStr.Format("%0.2lf",interY*t/eachPie);
              if(t<=n+4)
   dc->TextOut(x+5,y-interY-2,numStr);

   y-=interY;
  }
  /*y轴的箭头**/
        dc->MoveTo(pointArr[0].x-5,pointArr[0].y+5);
  dc->LineTo(pointArr[0].x,pointArr[0].y);
  dc->MoveTo(pointArr[0].x,pointArr[0].y);
  dc->LineTo(pointArr[0].x+5,pointArr[0].y+5);
        dc->TextOut(pointArr[0].x+8,pointArr[0].y,"date");
       
   CPoint from,to;
  to.x=pointArr[1].x+interX;
  to.y=lenY-data[1]*eachPie;   //缩小比例
      y=to.y;
   for(x=to.x;x>pointArr[1].x;x-=3.5)    
   {
    dc->MoveTo(x,y);
    dc->LineTo(x-2,y);
   }
     for(t=1;t<n;t++)
    {
            from.x=to.x;
   from.y=to.y;

   to.x=from.x+interX;
   to.y=lenY-data[t+1]*eachPie;

   dc->MoveTo(from);
   dc->LineTo(to);
   

   y=to.y;
   for(x=to.x;x>pointArr[1].x;x-=3.5)    
   {
    dc->MoveTo(x,y);
    dc->LineTo(x-2,y);
   }
       
   
    }


}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值