newPen.CreatePen(PS_SOLID,1,RGB(0,0,0));
oldPen=pDC->SelectObject(&newPen);
pDC->MoveTo(XAxis_BasicPt,YAxis_BasicPt);
for (i=0;i<=DrawCount;i++)
{
pDC->LineTo(XAxis_BasicPt+Num,(int)(YAxis_BasicPt-Sgvalue.LeftMoudTemp_Value[i]*2));
Num+=5;
}
pDC->SelectObject(oldPen);
按理说,这么画应该没什么问题,但是却出现了一个问题。
问题是:在画完最后一个数据点时,还会画一条线,是直接连到X轴的,而且这条直线是折线形的,郁闷死了(有时候是正常的)
大家看看是什么问题导致的,画图函数就这个,其它都无关紧要的,
数据是时钟里模拟给的,1S刷新一次
oldPen=pDC->SelectObject(&newPen);
pDC->MoveTo(XAxis_BasicPt,YAxis_BasicPt);
for (i=0;i<=DrawCount;i++)
{
pDC->LineTo(XAxis_BasicPt+Num,(int)(YAxis_BasicPt-Sgvalue.LeftMoudTemp_Value[i]*2));
Num+=5;
}
pDC->SelectObject(oldPen);
按理说,这么画应该没什么问题,但是却出现了一个问题。
问题是:在画完最后一个数据点时,还会画一条线,是直接连到X轴的,而且这条直线是折线形的,郁闷死了(有时候是正常的)
大家看看是什么问题导致的,画图函数就这个,其它都无关紧要的,
数据是时钟里模拟给的,1S刷新一次
改为: for (i=0;i <DrawCount;i++)
多画了一个?
对头,边界问题没处理好!你这样实际画了DrawCount+1个点。
我每次在时钟里都是 Invalidate(FALSE);
UpdateWindow();
马上进行刷新的,但是曲线还是慢了几个节拍,
CDC MemDC; //..创建一个设备环境对象
MemDC.CreateCompatibleDC (&dc);
CBitmap MemBitmap;
MemBitmap.CreateCompatibleBitmap(&dc,nWidth,nHeight); //..创建一个位图对象
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
···········(其它功能)
this->Draw_Curve(·····)
dc.BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
OnTimer:
·······(数据处理)
Invalidate(FALSE);
UpdateWindow();
上面就是主要的代码了,一些数据的处理就不贴出来了