vc++的MSComm串口通信,把接受的数据用曲线显示,picture控件画图解决方法
vc++的MSComm串口通信,把接受的数据用曲线显示,picture控件画图
void CAIDlg::huatu() //画线
{
long x,y;//坐标
CWnd *pWnd=GetDlgItem(IDC_picture);//建立画笔
CRect rect;
pWnd->GetClientRect(rect);
CDC *pDC=pWnd->GetDC();
CPen *PNewPen=new CPen;
PNewPen->CreatePen(PS_SOLID,1,RGB(255,0,0));//设置线型及颜色
CPen *POLDPen=pDC->SelectObject(PNewPen);
pDC->MoveTo(rect.left,rect.bottom-10);//起始点
for(int i=1;i<=num-1;i++)
{ x=rect.left+6*i;
y=rect.bottom-10-10*(int)(data[i]/60.0*rect.Height());
pDC->LineTo(x,y);//画线
if(x>rect.Width()-20)//确定画线区域
{ renew(); pDC->MoveTo(rect.left,rect.bottom-5);}
}
pDC->SelectObject(POLDPen);
delete PNewPen;
}
上面是我自己编的一些代码,以及网上看的一些,就是有一个地方不太懂,各位能不能指导一下?
for(int i=1;i<=num-1;i++)
{ x=rect.left+6*i;
y=rect.bottom-10-10*(int)(data[i]/60.0*rect.Height());
pDC->LineTo(x,y);//画线
if(x>rect.Width()-20)//确定画线区域
{ renew(); pDC->MoveTo(rect.left,rect.bottom-5);}
}
就是这句 y=rect.bottom-10-10*(int)(data[i]/60.0*rect.Height()); 为什么要除以60.0,??又要乘以rect.Height(),??rect.Height()是指picture控件的高度还是指别的什么??又要在前面乘以10.??
那如果我想把坐标轴刻上刻度,怎么才能与得到的数据相对应了??
------解决方案--------------------
就是这句 y=rect.bottom-10-10*(int)(data[i]/60.0*rect.Height()); 为什么要除以60.0,??又要乘以rect.Height(),??rect.Height()是指picture控件的高度还是指别的什么??又要在前面乘以10.??
那如果我想把坐标轴刻上刻度,怎么才能与得到的数据相对应了??
VC++MSComm串口通信实时曲线坐标
--------
应该是量程是6 除以60和乘以10是提高精度0.1
------解决方案--------------------
画图的话,推荐本人的一个工具。
http://blog.****.net/baita96/
void CAIDlg::huatu() //画线
{
long x,y;//坐标
CWnd *pWnd=GetDlgItem(IDC_picture);//建立画笔
CRect rect;
pWnd->GetClientRect(rect);
CDC *pDC=pWnd->GetDC();
CPen *PNewPen=new CPen;
PNewPen->CreatePen(PS_SOLID,1,RGB(255,0,0));//设置线型及颜色
CPen *POLDPen=pDC->SelectObject(PNewPen);
pDC->MoveTo(rect.left,rect.bottom-10);//起始点
for(int i=1;i<=num-1;i++)
{ x=rect.left+6*i;
y=rect.bottom-10-10*(int)(data[i]/60.0*rect.Height());
pDC->LineTo(x,y);//画线
if(x>rect.Width()-20)//确定画线区域
{ renew(); pDC->MoveTo(rect.left,rect.bottom-5);}
}
pDC->SelectObject(POLDPen);
delete PNewPen;
}
上面是我自己编的一些代码,以及网上看的一些,就是有一个地方不太懂,各位能不能指导一下?
for(int i=1;i<=num-1;i++)
{ x=rect.left+6*i;
y=rect.bottom-10-10*(int)(data[i]/60.0*rect.Height());
pDC->LineTo(x,y);//画线
if(x>rect.Width()-20)//确定画线区域
{ renew(); pDC->MoveTo(rect.left,rect.bottom-5);}
}
就是这句 y=rect.bottom-10-10*(int)(data[i]/60.0*rect.Height()); 为什么要除以60.0,??又要乘以rect.Height(),??rect.Height()是指picture控件的高度还是指别的什么??又要在前面乘以10.??
那如果我想把坐标轴刻上刻度,怎么才能与得到的数据相对应了??
VC++
MSComm
串口通信
实时曲线
坐标
------解决方案--------------------
就是这句 y=rect.bottom-10-10*(int)(data[i]/60.0*rect.Height()); 为什么要除以60.0,??又要乘以rect.Height(),??rect.Height()是指picture控件的高度还是指别的什么??又要在前面乘以10.??
那如果我想把坐标轴刻上刻度,怎么才能与得到的数据相对应了??
VC++MSComm串口通信实时曲线坐标
--------
应该是量程是6 除以60和乘以10是提高精度0.1
------解决方案--------------------
画图的话,推荐本人的一个工具。
http://blog.****.net/baita96/