+ -
当前位置:首页 → 问答吧 → 用双缓冲出了问题

用双缓冲出了问题

时间:2011-12-02

来源:互联网

我用CArry<CPoint,CPoint>pt[20]来动态的记录n个贝塞尔曲线的点
用鼠标事件来添加点
total来表示已绘制的曲线的个数
menu里面点 绘制贝塞尔曲线 使total++

在onDraw里面循环绘制每个贝赛尔曲线

C/C++ code
void CMyView::OnDraw(CDC* pDC)
{
    CMyDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    
    int i,j;
    long x0,y0;
    CPen MyPen1,*OldPen1,MyPen2,*OldPen2,MyPen3,*OldPen3;
    MyPen1.CreatePen(PS_SOLID,1,RGB(0,0,255));
    MyPen2.CreatePen(PS_SOLID,1,RGB(255,0,0));
    MyPen3.CreatePen(PS_SOLID,1,RGB(0,255,255));

    CDC MemDC;
    CBitmap MemBitmap;
    MemDC.CreateCompatibleDC(pDC);

    MemBitmap.CreateCompatibleBitmap(pDC,cWidth,cHeight);
    CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
    MemDC.FillSolidRect(0,0,cWidth,cHeight,RGB(255,255,255));

    // TODO: add draw code for native data here

    for(j=0;j<total;j++)
    {
        if(show)
        {
            OldPen1=MemDC.SelectObject(&MyPen1);
            for(i=0;i<pt[j].GetSize();i++)
            {
                MemDC.Rectangle(pt[j].GetAt(i).x-5,pt[j].GetAt(i).y-5,pt[j].GetAt(i).x+5,pt[j].GetAt(i).y+5);
            }

            OldPen3=MemDC.SelectObject(&MyPen3);
            if(pt[j].GetSize()>0)
            {
                x0=pt[j].GetAt(0).x;
                y0=pt[j].GetAt(0).y;
                for(i=1;i<pt[j].GetSize();i++)
                {
                    MemDC.MoveTo(x0,y0);
                    x0=pt[j].GetAt(i).x;
                    y0=pt[j].GetAt(i).y;
                    MemDC.LineTo(x0,y0);
                }
            }
        }
        OldPen2=MemDC.SelectObject(&MyPen2);    
        
        if(select[j])
        {
            DrawBezier(&MemDC,pt[j]);
        }
        else
        {
            DrawBYangTiao(&MemDC,pt[j],bstep[j]);    
        }

        pDC->BitBlt(0,0,cWidth,cHeight,&MemDC,0,0,SRCCOPY);
        MemBitmap.DeleteObject();
        MemDC.DeleteDC();

    }

}


一用双缓冲,在添加 贝塞尔曲线的时候就死掉了

求解

作者: yangyifeng01   发布时间: 2011-12-02

也在弄bezier,bspline和nurbs呢?干吗不用opengl捏?

作者: libralibra   发布时间: 2011-12-02

热门下载

更多