一对话框,大概40ms左右就要整个重绘,上面有很多曲线,点,数字等等
可能因为更新的地方太多了,所以画面可以很明显的感觉在闪
OnEraseBkgnd已经返回TRUE,现在没办法了

解决方案 »

  1.   

    前景再闪,看一下代码DrawWave这几个函数是画图的
    有办法强制延迟更新吗? RECT rect;
    GetClientRect(&rect);
    int nWidth  = rect.right - rect.left;
    int nHeight = rect.bottom - rect.top; //使用内存dc
    CDC memDC;
    //NULL
    memDC.CreateCompatibleDC(NULL);
    CBitmap memBitmap;
    CBitmap* pOldMemBmp = NULL;
    memBitmap.CreateCompatibleBitmap(pdc,nWidth,nHeight);
    pOldMemBmp = memDC.SelectObject(&memBitmap); //memDC.BitBlt(rect.left, rect.top, nWidth, nHeight, pdc, 
    // 0, 0, SRCCOPY); //memDC.FillSolidRect(0,0,nWidth,nHeight,RGB(0,0,0));
    memDC.SetTextColor(RGB(192,192,192));
    memDC.SetBkColor(RGB(0,0,0));
    memDC.SetBkMode(TRANSPARENT); //获得更新区域 RECT WaveRect = {rect.left + nWidth/36,rect.top +10,rect.right,rect.top+rect.top + nHeight/4};
    m_Wave.DrawWave(&memDC,WaveRect); //获得Vec的RECT
    RECT VecRect = {rect.left + nWidth/36,rect.top + nHeight/4,rect.left + nWidth/2,rect.top + (double)nHeight*3/4};
    m_Vector.DrawVec(&memDC,VecRect); //获得FFT的RECT
    RECT FFtRect = {rect.left + nWidth/36 + nWidth/2 ,rect.top + nHeight/4,rect.right,rect.top + (double)nHeight*3/4};
    m_FFt.DrawFFt(&memDC,FFtRect);

    //获得向量的RECT
    RECT PhasicRect = {rect.left+nWidth/36, rect.top+nHeight/6*5,rect.right,rect.bottom};
    m_Phasic.DrawPhasic(&memDC,PhasicRect); BOOL miao = pdc->BitBlt(rect.left, rect.top, nWidth, nHeight, &memDC, 
    0, 0, SRCCOPY); memBitmap.DeleteObject();
    memDC.DeleteDC();
      

  2.   

    按你的说法,确实在对话框拖动的时候文字再闪
    但是直接加上去的控件没问题,但是动态TextOut的文字还是闪,另外我lineto上去的先也会闪
    可以怎么解决?