用双缓冲出了有关问题

用双缓冲出了问题
我用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();

    }

}


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

求解

------解决方案--------------------
MemBitmap.DeleteObject();
MemDC.DeleteDC();
把这两个调换位置,然后到for循环外面

------解决方案--------------------
同2楼
,你在循环外创建的环境,一定要在循环外销毁,

而且要先把被选中的设备选出,然后再销毁。

------解决方案--------------------
你应该在全部曲线画到缓冲DC上后,再BitBlt(贴图),也就是BitBlt也得放循环外面~