我的单文档用CSplitterWnd  进行分割后,拖拉边框,分割后左右的视图上的空间或者图片都会闪烁,请问下怎么解决

解决方案 »

  1.   

    WM_ERASEBKGND 返回TURE
    WM_PAINT 使用双缓冲
      

  2.   

    操作系统默认设置了SPI_DRAGFULLWINDOW属性,拖动时两边视图会重绘。而重绘时先删除背景,就觉得闪烁。
    SystemParameterInfo关掉SPI_DRAGFULLWINDOW,拖的时候只看见框。但这个是全局的。建议WM_ERASEBKGRD不要擦。如果绘制很复杂,在WM_PAINT时双缓冲。
      

  3.   

    我的程序里面图片添加放在OnInitialUpdate()函数里面了,而且基本上所有控件都是动态生成的,要如何处理才不会闪? 我的电脑配置很低,是不是电脑的问题呢? 
      

  4.   

    控件放在图片上方?控件大小随着拖动变化?
    如果不好弄,你可以在开始拖动时禁止SPI_DRAGFULLWINDOW,拖动结束时恢复原值。
      

  5.   


    和电脑的关系不太大。
    我之前在ScrollView里插图片,刷新时有抖动,将背景改为空,使用双缓冲,解决了问题。
      

  6.   

    1楼答案  加你父窗体设置为ClipChildren风格看看
      

  7.   

    才学MFC不久有点搞不定,我把添加图片的代码贴出来了,说明下我是是在ListView中添加了32个相同图片Item,谁帮我改下哦,最好加上注释  再加 50分void CListControlWnd::OnInitialUpdate()

    CBitmap *bp = new CBitmap();
    bp->LoadBitmap(IDB_MODULE);
    m_ImageLst.Create(128,128,ILC_COLOR24|ILC_MASK,1,0);
    m_ImageLst.Add((CBitmap*)bp,RGB(255,255,255));//,LVSIL_NORMAL)
    bp->DeleteObject();
    delete bp;
    GetListCtrl().SetImageList(&m_ImageLst,LVSIL_NORMAL);
    for(int i = 0;i<32;i++)
    {
    GetListCtrl().InsertItem(i,L"设备",0);
    GetListCtrl().Update(i);
    }
     }
      

  8.   

    我发现闪烁的原因了跟图片无关,跟CSplitterWnd::RecalcLayout,这一句代码 有关系,求大神讲解下,这个项目界面就这个问题很烦人