曲线实时绘制 新手,第一次接触曲线实时绘制,希望大侠给点资料! 解决方案 » 免费领取超大流量手机卡,每月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的,把几个点连成线,再一点点深入,实时曲线挺容易!有问题再讨论! 请教各位 大虾,使用win32 api如何实现鼠标拖拽效果 我想实现多次出现非模态对话框 opencv 当右击窗口上的ListView控件就引出菜单,但菜单的位置不对。请朋友指点一下。 visual studio 6.0 如何在WINDOWS XP 下安装? 我想在一个VC作的DIALOG程序在运行时带入参数,怎么办? 关于这样的脚本文件的编写! 各位仁兄:如何打印带行号的源代码?多谢 MFC设计的程序中怎样保护对话框或别的资源不被EXESCOPE之类软件修改? CHtmlView中响应输入法的消息 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的,把几个点连成线,再一点点深入,实时曲线挺容易!有问题再讨论!