曲线实时绘制 新手,第一次接触曲线实时绘制,希望大侠给点资料! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CCurveObj::FillCurve(int x, LPPOINT point1, int nPointNum, COLORREF cFillColor, CDC* pDC, int nFillMode){ POINT p1,p2; LPPOINT point; point = new POINT[nPointNum+2]; p1.x = p2.x = x; p1.y = point1[0].y; p2.y = point1[nPointNum-1].y; if (nFillMode == FILLLEFTRIGHT) { memcpy(point,point1,sizeof(POINT)*nPointNum); point[nPointNum] = p2; point[nPointNum+1] = p1; FillPoly(point, nPointNum+2, cFillColor, pDC); } delete point;}void CCurveObj::FillCurve(LPPOINT point1, LPPOINT point2, int nPointNum, COLORREF cFillColor, CDC* pDC, int nFillMode){ LPPOINT point,p1,p2; point = new POINT[nPointNum*2]; int j; if (nFillMode == FILLLEFTRIGHT) { memcpy(point,point1,sizeof(POINT)*nPointNum); p1 = point+nPointNum; p2 = point2+nPointNum-1; for (j=0; j<nPointNum; j++) { *p1 = *p2; p1++; p2--; } FillPoly(point, 2*nPointNum, cFillColor, pDC); } delete point;}void CCurveObj::FillPoly(LPPOINT point, int nPointNum, COLORREF cFillColor, CDC* pDC){ if (nPointNum < 3) return; ASSERT(nPointNum > 0); CBrush br(cFillColor); CBrush* pOldBrush = pDC->SelectObject(&br); pDC->Polygon(point,nPointNum); pDC->SelectObject(pOldBrush); return;} 建议你下个MiniDraw看看,再看些MFC绘图的书,主要是三言两语说不清楚。至少要明白CDC,CPen、CBrush这些类的用法。知道lineto()、 moveto()、bitblt()这些函数的意义。上面我给你的代码主要是用Polygon()来代替moveto、lineto来进行连续点的绘制。这样速度有提高。 就是lineto()、 moveto(),和双缓冲!也就是先画到内存中然后在拷屏bitblt().楼主可以先试一个没有timer的,把几个点连成线,再一点点深入,实时曲线挺容易!有问题再讨论! 关于程序编译的问题 DoModal()问题 字符串转换 mschart控件 调用函数 SetColumnLabel() 出错 请问:如何合成两张图片(类似大头贴) ODBC连接方式的数据查询 关于不同类型字符串转换的初级菜鸟问题!!!! 关于调用动态链接库的问题.解决者,另开贴200分. java opencv 联合编程传值的问题 vc 程序自删除 VC工程的资源是如何被编译和链接的? 如何将ListView子类化
void CCurveObj::FillCurve(int x, LPPOINT point1, int nPointNum,
COLORREF cFillColor, CDC* pDC, int nFillMode)
{
POINT p1,p2;
LPPOINT point;
point = new POINT[nPointNum+2]; p1.x = p2.x = x;
p1.y = point1[0].y;
p2.y = point1[nPointNum-1].y;
if (nFillMode == FILLLEFTRIGHT)
{
memcpy(point,point1,sizeof(POINT)*nPointNum);
point[nPointNum] = p2;
point[nPointNum+1] = p1;
FillPoly(point, nPointNum+2, cFillColor, pDC);
}
delete point;
}void CCurveObj::FillCurve(LPPOINT point1, LPPOINT point2, int nPointNum,
COLORREF cFillColor, CDC* pDC, int nFillMode)
{
LPPOINT point,p1,p2;
point = new POINT[nPointNum*2];
int j;
if (nFillMode == FILLLEFTRIGHT)
{
memcpy(point,point1,sizeof(POINT)*nPointNum);
p1 = point+nPointNum; p2 = point2+nPointNum-1;
for (j=0; j<nPointNum; j++)
{
*p1 = *p2;
p1++;
p2--;
}
FillPoly(point, 2*nPointNum, cFillColor, pDC);
}
delete point;
}void CCurveObj::FillPoly(LPPOINT point, int nPointNum, COLORREF cFillColor, CDC* pDC)
{
if (nPointNum < 3)
return;
ASSERT(nPointNum > 0);
CBrush br(cFillColor);
CBrush* pOldBrush = pDC->SelectObject(&br);
pDC->Polygon(point,nPointNum);
pDC->SelectObject(pOldBrush);
return;
}
也就是先画到内存中然后在拷屏bitblt().
楼主可以先试一个没有timer的,把几个点连成线,再一点点深入,实时曲线挺容易!有问题再讨论!