对话框上显示曲线的问题
写了一段显示时间速度曲线的程序:
BOOL logic = TRUE;
void CGPGGA::OnPaint()
{
const int num=60;
GetDlgItemText(IDC_speed,Str3);
AfxExtractSubString(Str2, (LPCTSTR)Str, 2, ':');//提取出秒数
float initX=atoi(Str2);
float initY=atoi(Str3);
//分别取得X和Y最大值,最小值
float maxX=60;
float minX=0;
float maxY=120;
float minY=0;
//确定图象显示大小
int width=600;
int height=300;
//确定坐标图四周预留的空白大小
const int mytop=10;
const int mybottom=40;
const int myleft=120;
const int myright=50;
//确定X,Y轴每单位显示宽度
float intervalX=(width-myleft-myright)/(maxX-minX);
float intervalY=(height-mybottom-mytop)/(maxY-minY);
CStatic* pstatic = (CStatic*)GetDlgItem(IDC_MYSTATIC);
CDC* pDC = pstatic->GetDC();
if (logic == TRUE)
{
//绘制曲线。由于绘图坐标的Y轴是向下延升,所以这里每个点的Y值是用
//图象高度减去y值大小。
pDC->MoveTo(int(myleft+(initX-minX)*intervalX), int(height-(mybottom+(initY-minY)*intervalY)));
if (initX<60)
{
pDC->LineTo(int(myleft+(initX-minX)*intervalX), int(height-(mybottom+(initY-minY)*intervalY)));
} //绘制X,Y轴
//X轴从图形区域最左端到最右端
float bottomY=0;
float leftX=0;
//bottomY表示X轴的y值,leftX表示Y轴的x值
if(minY>0)
bottomY=minY;
if(minX>0)
leftX=minX;
pDC->MoveTo(int(myleft),int(height-(mybottom+(bottomY-minY)*intervalY)));
pDC->LineTo(int(width-myright),int(height-(mybottom+(bottomY-minY)*intervalY)));
//Y轴从图形区域最底端到最顶端
pDC->MoveTo(int(myleft+(leftX-minX)*intervalX),int(height-mybottom));
pDC->LineTo(int(myleft+(leftX-minX)*intervalX),int(mytop));
//确定显示刻度个数
const int count=12;
//确定每个显示刻度之间的宽度
float spaceX=(width-myleft-myright)/count;
float spaceY=(height-mybottom-mytop)/count;
//绘制刻度和刻度值
pDC->SetBkMode(TRANSPARENT);//字体背景透明
CString str;
//X轴
for(int i=0;i<=count;i++)
{
str.Format("%.0f",minX+i*(60)/count);
pDC->MoveTo(int(myleft+spaceX*i),int(height-(mybottom+(bottomY-minY)*intervalY)));
pDC->LineTo(int(myleft+spaceX*i),int(height-(mybottom+(bottomY-minY)*intervalY+5)));
pDC->TextOut(int(myleft+spaceX*i-10),
int(height-(mybottom+(bottomY-minY)*intervalY-5)),str);
}
//Y轴
for(i=0;i<=count;i++)
{
str.Format("%.0f",minY+i*(120)/count);
pDC->MoveTo(int(myleft+(leftX-minX)*intervalX),int(height-(mybottom+spaceY*i)));
pDC->LineTo(int(myleft+(leftX-minX)*intervalX+5),int(height-(mybottom+spaceY*i)));
pDC->TextOut(int(myleft+(leftX-minX)*intervalX-30),int(height-(mybottom+spaceY*i+8)),str);
}
//绘制X,Y轴的变量名
pDC->TextOut(width/2,height-15,"时间(s)");
pDC->TextOut(10,height/2,"速度(km/h)");
}
}
我是用的是EDIT框的EN_CHANGE相应的OnPoint函数,想显示时间速度曲线可是我在红字部分遇到了问题,每次响应OnPoint函数都会MoveTo新的点然后LineTo新的点,结果画不出线。
我怎样才能保留住上一个点,然后LineTo新的点呢
求指点谢谢
[解决办法]
每次调用OnPoint会重绘坐标,所以必须在OnPoint以外江上一次点进行保存