新手,第一次接触曲线实时绘制,希望大侠给点资料!

解决方案 »

  1.   


    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;
    }
      

  2.   

    建议你下个MiniDraw看看,再看些MFC绘图的书,主要是三言两语说不清楚。至少要明白CDC,CPen、CBrush这些类的用法。知道lineto()、 moveto()、bitblt()这些函数的意义。上面我给你的代码主要是用Polygon()来代替moveto、lineto来进行连续点的绘制。这样速度有提高。
      

  3.   

    就是lineto()、 moveto(),和双缓冲!
    也就是先画到内存中然后在拷屏bitblt().
    楼主可以先试一个没有timer的,把几个点连成线,再一点点深入,实时曲线挺容易!有问题再讨论!