当用某个窗口在我的程序窗口上移动的时候, 我的程序窗口中的控件都闪动, 请问怎么给控件做防闪处理.

解决方案 »

  1.   

    出现闪烁是因为其他窗口在你的程序窗口上移动之后,会使你的程序窗口的相应区域变为无效区域,
    并触发WM_PAINT消息。
    如果闪烁比较明显,建议LZ检查下自己处理WM_PAINT消息的函数中是否有很耗时的显示操作。
      

  2.   

    这个有几种可能:
    1.如果你自己重载过OnPaint之类的消息的话,画图的时候一定要加缓冲,最后一次性画到屏幕DC上。
    2.如果你界面布局比较复杂,层次很多,那就容易闪烁,层次越多闪的越厉害。
    3.是否使用了TabCtrl?如果把各个页面的父窗体设为TabCtrl,那么窗体在大小改变或者刷新的时候闪的就比较厉害。UltraEdit配置界面也用到了TabCtrl,但是大小变化的时候不会闪。他的做法是,各个页面的父窗体并不是TabCtrl,各个页面与TabCtrl是平级的,但是TabCtrl的Z-Order被放在最下面。
    4.适当的根据情况调整ClipSibling和ClipChildren属性,会明显的减少闪烁问题。
      

  3.   

    LZ重载的WM_PAINT消息处理函数里面(如OnPaint()、OnDraw())是否有很耗时的操作?如果有,建议LZ使用双缓冲,还有如果是在WINCE或其他平台,而不是WIN32平台开发,刷新慢的现象就更为明显。
    所以LZ一定要提高自己程序里面WM_PAINT消息处理函数的效率