我在做一个类似于星际争霸地图编辑器的程序。由于地图的尺寸比视的尺寸要大,所以用到了CScrollView类。但是有一个问题就是当CScrollView类滚动时要重画界面,可是这种滚动重画会闪烁。现像是我画上去的图片和白色的背景交替切换,就是这样闪的。我想出现这种现像的原因很可能是当我在CScrollView类的OnDraw事件中画图时基类总是先把背景涂上白色,这样当我再向白色背景上画图时就会发现白色背景和深色的前景交替闪烁。要解决这个问题只能屏蔽基类将背景填为白色的操作,可是我不知道用什么方法。有没有人能帮小弟一把。
    还有就是我在OnPaint事件中试过一次也没能实现。这个功能不是不可实现的,因为星际争霸的地图编辑器已经实现了。

解决方案 »

  1.   

    其实很简单,只需要一行代码:
    重载BOOL CXXXView::OnEraseBkgnd(CDC* pDC) 
    {
    return true;
    }
    这样就不会自动绘制白色背景了
      

  2.   

    呵呵,我也刚刚花了几天时间做了一个类似于星际争霸的地图编辑器,这几天来也是问题重重,不过有了大家的帮助,什么问题都能解决! 我用的是GDI+,加了一个DialogBar,在DialogBar中加了一个List contrl和一个Combo box还有其余几个编辑框和按纽,在状态栏中显示鼠标位置及当前打开图片的尺寸.不过没有用到双缓冲,所以在背景图上显示的东西多的时候就会一眨一眨地,慢啊.不过现在还是能凑合着用,以后有时间再改过吧!楼上说的没错,就是在视图类中加载OnEraseBkgnd并直接return TRUE就可以去掉"图片和白色的背景交替切换". 我也对MFC一知半解,现在正抱着技术内幕砖头书在啃,呵呵...
      

  3.   

    see DRAWCLI sample(MFC) in MSDN
      

  4.   

    to jiangsheng(蒋晟.MSMVP2004Jan) , THXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx!!
      

  5.   

    你在CScrollView这个类中的OnVScroll事件中写你的重画代码并且写 在SB_ENDSCROLL下       OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
     switch(nSBCode)
     {
       
    case SB_ENDSCROLL:
    this->RedrawWindow();
    ..........//重画代码
             break;
     }
      

  6.   

    要不你也可以在OnVScroll或OnHScroll中写时间延长在重画,反正主要问题是重画事件频率太高所至