add WM_ERASEBKGND message handler , return directly (do not call base implementation) to avoid flicker.

解决方案 »

  1.   

    这时产生的是WM_PAINT消息,你是不是在重载了这个消息画
    棋盘?建议你不要这样做,可以考虑在OnDraw()中做,在
    OnPaint()函数中使用Invalidate(TRUE)是使窗口无效导致
    从而调用OnDraw()来重绘窗口,我感觉若你想用矩形区域无效
    的方式重绘的话,应在前台窗口OnPaint()中先获得窗口区域:
    CRect rect;//最好用全局变量
    GetWindwoRect(&rect);
    //在后台窗口OnPaint中
    ScreenToClient(&rect);
    InvalidateRect(rect,TRUE);//这个语句是避免闪烁的阿!第一个参数怎么设置!
    以上代码未经试验,仅供参考。
    另外记得好象是使区域或窗口无效后必须调用UpdateWindow()函数使之
    刷新。有些类的OnPaint()函数中无调用OnDraw(),可能要手工做。