如果使用双缓冲仍然闪呢 +++++++++++++++++
使用双缓冲不会闪,除非你不会用。

解决方案 »

  1.   

    设置裁减区,尽量减小重绘区域!
      

  2.   

    怎么用双缓冲呢!给一两个实例吧!
      

  3.   

    所谓的双缓冲就是先把GDI操作放到一个内存DC中,全部画完后再一次性的bitblt到目标DC中去
    void CVideoView::OnDraw(CDC* pDC)
    {
    // TODO: add draw code here
    if(m_pFrameData)
    {
    CRect rc;
    GetClientRect(&rc);

    CDC mdc;
    mdc.CreateCompatibleDC(pDC);
    CBitmap bitmap;
    bitmap.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());
    CBitmap *OldBitmap = mdc.SelectObject(&bitmap); mdc.SetStretchBltMode(COLORONCOLOR);

    ::StretchDIBits(mdc.GetSafeHdc(),

    640,480,-640,-480,
    0,0,640,480,
    m_pFrameData,
    &m_bmHeader,
    DIB_RGB_COLORS,
    SRCCOPY);
    CBrush brh( RGB(0,0,0));
    for(int i=0; i<4; ++i)
    {
    mdc.FrameRect(m_pDataView->m_Rect[i],  m_pDataView->m_fRatio[i] > 0.6 ?
    &m_brhGreen : &m_brhRed);
    }
    mdc.FrameRect(m_pDataView->m_Rect[4], m_pDataView->m_fRatio[4] > 0.75 ? 
    &m_brhGreen : & m_brhRed); pDC->BitBlt(0,0, rc.Width(), rc.Height(), &mdc, 0, 0, SRCCOPY); mdc.SelectObject(OldBitmap);
    bitmap.DeleteObject();
    mdc.DeleteDC();
    }
    }