处理WM_ERASEBKGND,直接返回TRUE;
CYourView::OnEraseBkgnd( CDC* pDC )
{
   return TRUE;
}
试试看吧

解决方案 »

  1.   

    在OnDraw(CDC *pDC)
    定义一个内存CDC对象MemDC;
    然后将位图载入MemDC;
    中用BitBlt(0,0,高度,宽度,&MenDC,0,0,高度,宽度,SRCCOPY);
    可有效解决闪烁。
    闪烁原因是因为直接现实位图时pDC图像处理速度跟不上显示器刷新速度(既要实时加载,还要实时现实,而处理图像是很耗费时间的),但当你把处理过程交给MemDC处理,而pDC只负责贴图,速度便能跟上了。
      

  2.   

    好像用了CDC对象的MemDC重绘时还是会剧烈闪动
      

  3.   

    tj98zyz(小鸟) 的办法好像只能使显示看上去没有那些白癍,而是变成没有清除的窗口,但还是重绘闪烁啊!
      

  4.   

    dishou(低手) 其实我并不是直接用的CDC,而是在CMyDoc中读出位图后,以后使用DrawDibDraw绘制的。但这样绘制虽然在小图片(800×600)时闪烁还可以接受,但再大了,如4000×3500,就很难接受了,但ACDSEE看这个大图片时就没有这个问题:(
      

  5.   

    低手说的对,你的绘制方法有问题。只有使用MemDC才能消除闪烁。
      

  6.   

    Invalidate(FALSE);
    绘制时不要重画背景
      

  7.   

    尽管你读图片是在doc中做的,但这种做法只能减少I/O时间,闪烁的原因是通过cdc在显示设备上绘制的时间大于人眼的视觉滞留时间,从而使得人眼能够区别系统的背景擦除和绘制过程。所以laserman(玩家一) 和tj98zyz(小鸟) 的做法能解决背景擦除的问题,但如果图片本身的绘制时间如果很长的话,还是会出现闪烁,所以还需要减少图片的绘制时间,一般的做法是将图片先绘制在一个虚拟设备上,比如memdc,然后将其一次更新到显示设备上。但是在创建memdc时,其宽度和高度是受显示设备分辨率的影响,即不可能创建一个4000*3600的memdc,所以你还需要借鉴scrollview(带滑条的view)的显示做法。
      

  8.   

    re:arttalk(bear) 
    其实开始我用的是dishou(低手)说的那种方法,在OnDraw外申请一个CDC对象myDC,LoadBitmap那个超大图片,然后在OnDraw(*pDC)里想用pDC->BitBlt(0,0,h,w,&myDC,0,0,SRCCOPY)显示之(不好意思,照着书上抄的),可是却不能显示。后来放弃了,要不您给俺说说这是什么原因??
      

  9.   

    首先你要确定loadBitmap函数已经成功返回,一般如果图片太大的话该函数的调用会失败的。
    至于pDC->BitBlt的调用,你必须保证myDC里确实有这副图片。
    结果的检测方法,你可以先显示myDC,如果myDC能正确显示的话,你再从pDC找原因,比如pDC的初始化等等