我是为了消除调用Invalidate()时出现的闪动。

解决方案 »

  1.   

    重载ONDraw()或者OnPaint()函数,在那里使用双缓存
      

  2.   

    HRESULT Cxxx2::OnDraw(ATL_DRAWINFO &di)
    {
    RECT& rect = *(RECT*)di.prcBounds;
    HDC dc = di.hdcDraw;
    HDC dcmem = ::CreateCompatibleDC(dc);
    int width = rect.right-rect.left;
    int height = rect.bottom-rect.top;
    HBITMAP hbmpdraw = ::CreateCompatibleBitmap(dcmem,width,height);
    HBITMAP hbmpold = (HBITMAP)::SelectObject(dcmem,hbmpdraw);
    SelectObject( dcmem, GetStockObject(BLACK_BRUSH) );
    Rectangle(dcmem, 0,0,width, height);
    //more drawing here
    BitBlt(dc,0,0,width,height,dcmem,0,0,SRCCOPY);
    SelectObject(dcmem,hbmpold);
    DeleteObject(hbmpdraw);
    DeleteObject(dcmem); return S_OK;
    }
      

  3.   

    masterz(MS MVP)说的既是最精典的方法!
      

  4.   

    能不能解释一下?
    哪一句是关键?
    我的OnDraw参数好象都是CDC
      

  5.   

    重载CWnd::OnEraseBkGrand,
    直接return TRUE;