void CMyDialog::OnPaint()
{
     //IDC_STC_CANVAS是一大块CStatic控件
     CWnd* _pWnd = GetDlgItem(IDC_STC_CANVAS);
     CDC* _pDC = _pWnd->GetDC();
     CDC* _pMemDC=new CDC;
     _pMemDC->CreateCompatibleDC(NULL);
     CBitmap* _pMemDCbmp=new CBitmap;
     _pMemDCbmp->CreateCompatibleBitmap(_pDC, m_rectCoor.Width(),m_rectCoor.Height());
     CBitmap* _pOldBitmap = _pMemDC->SelectObject(_pMemDCbmp);
     .........
     .........
     _pDC->BitBlt(把_pMemDC复制过来);
     delete _pMemDCbmp;
     delete _pMemDC;
}
然后就用_pMemDC绘图,绘完之后再绘的是一条曲线,我要通过点击曲线对曲线进行编辑,还要通过OnMouseMove对曲线进行编辑,这时候界面就闪得十分厉害,这是什么呢?我用了双缓存呀为什么还闪得厉害,和没用一样

解决方案 »

  1.   

    双缓冲不是这么用的,用法错了!!应该这样:
    CDC* _pDC = _pWnd->GetDC();      
    CDC* _pMemDC = NULL;
    _pMemDC->CreateCompatibleDC(_pDC); 
      

  2.   

    CDC* _pMemDC = new CDC;
    _pMemDC->CreateCompatibleDC(_pDC); 
      

  3.   

    我要在OnMouseMove根据当前的Point来重新绘制曲线,所以会调用Invalidate()来重绘,这时候只要鼠标一动就闪得厉害
      

  4.   

    添加自定义cstatic控件,在里面绘图要好些吧
      

  5.   

    这肯定会闪!你都不如这样:鼠标按下并移动的时候把Point都放到一个list里,当松开鼠标的时候进行绘制曲线。
      

  6.   

    你用双缓冲绘图,然后把所有的对象定义成成员变量,OnPaint里面只用moveto,lineto,试一试看,我的是Vs2010,我就是这么做的