本帖最后由 saynosjc 于 2010-12-31 20:35:25 编辑

解决方案 »

  1.   

    MemDC.CreateCompatibleDC(NULL);
    ==MemDC.CreateCompatibleDC(pDC);
      

  2.   

    在定义一个BOOL变量,初始化为假,在OnDraw中添加绘图代码,用BOOL变量作为标记,假的时候不绘图,真的时候就开始绘图。
    参考
    if(DrawRealPoint==TRUE)
    {
        for(int i=1;i<=Alg;i++)
        {
    if(i==1)
    pDC->MoveTo(LtextWidth,SheetMax);   //这里写的就是重绘的代码,这样刷新后也不会消失
    else
    pDC->MoveTo(LastXPoint,LastYPoint);
    pDC->SelectObject(pPenBlue);                 //使用蓝色画笔
    pDC->LineTo(i*xEachPixels+LtextWidth,yAxisData[i]);
    pDC->SetPixel(i*xEachPixels+LtextWidth,yAxisData[i],RGB(255,0,255)); //画点使用绿色画笔
    LastXPoint=i*xEachPixels+LtextWidth;
    LastYPoint=yAxisData[i];
    }
    }
    有数据时先绘图(这个图刷新后就没有了),并将描点数据保存好,等绘图完成后将BOOL变量设为真,然后再调用Invalidate();
    刷新就可以了。
      

  3.   

    你的兼容dc创建的不对!!你的代码写在OnDraw里?你跟一下,开销太大。
    你在《VC知识库》里边搜索CDC或者双缓冲,有现成例子  参考参考
      

  4.   

    还有我的问题是我不可能每次操作都绘图调用Paint
    我的图像本来是每次在DOC绘好
    由Paint在Ondraw里画出来就行了
    但是改成双缓冲
    如何把我的图像数据写到MemBitmap上,在哪里写我的Paint函数