自己处理“重绘”的代码,即WM_ERASEBKGND消息。
使用判断,自己决定,可以完全地消除“闪屏”。

解决方案 »

  1.   

    我的思路是:能不能把我所画的内容生成一个类似与位图的东西放在内存中,然后在OnDraw函数中把这个位图选进去。可是由于我映射模式设为MM_LOMETRIC,好象不能生成位图。有没有类似的方法?
    huangbeyond:
      能否在说得详细一点?
      

  2.   

    画到后台的兼容DC,重绘制时,将兼容DC内容绘制到屏幕
    这样,即可保证内容不丢失,又可解决闪烁问题添加成员
    CBitmap m_membitmap;
    CDC memdc;然后窗口建立时
    CDC *pDC=GetDC();
    memdc.CreateCompatibleDC(pDC);
    m_membitmap.CreateCompatibleBitmap(pDC,size.cx,size.cy);//后台位图
    memdc.SelectObject(m_membitmap);
    ReleaseDC(pDC);绘制时
    先在后台画
      DrawSomething(&memdc);
    更新屏幕时(OnDraw)
      pDC->BitBlt(0,0,size.cx,size.cy,&memdc,0,0,SRCCOPY ); //将后台的位图复制到屏幕另:需要屏蔽掉WM_ERASEBKGND,或将窗口看作改为空画刷。
    大小变化时,将memdc选出,销毁,按新尺寸建立,选入也可在绘图时,临时建立memedc或membitmap,不作为类成员
      

  3.   

    FMD(Niko):我的映射模式为MM-LOMETRIC,能行吗?