大家有没有觉得在onsize()中调用SetWindowPos或者MoveWindow来实现对话框大小改变,控件得大小响应变化时,发现改变对话框大小时控件闪得很厉害,指的是那种很晃眼的感觉?

解决方案 »

  1.   

    你在OnSize里又调用SetWindowPos或者MoveWindow,会导致再次触发OnSize,严重的可能导致死循环能在OnSize里调用SetWindowPos或者MoveWindow,说明你本身的设计就不合理
      

  2.   

    void COutputBar::OnSize(UINT nType, int cx, int cy) 
    {
    CBCGPDockingControlBar::OnSize(nType, cx, cy); m_wndList.SetWindowPos (NULL, nBorderSize, nBorderSize, 
    cx - 2 * nBorderSize, cy - 2 * nBorderSize,
    SWP_NOACTIVATE | SWP_NOZORDER);
    }在OnSize里面有SetWindowPos 是正常的。没有出现闪烁。你看是不是其他的问题。
      

  3.   

    重载EraseBackground,擦除背景的时候什么也不做,再加上双缓冲,就不会闪了。
      

  4.   

    在OnSize()里取得窗口大小,更新画面时根据这个大小来画控件,不知可否
    《Windows程序设计》里TextOut是这样,不过好象也有点闪
    去搜了下,N多人问过
    http://topic.csdn.net/t/20050405/11/3909781.html
      

  5.   

    重载OnEraseBackground,直接return true;
    另外在绘制窗口的时候使用双环村
      

  6.   

    BOOL CSoundDlg::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default

    //return CDialog::OnEraseBkgnd(pDC);
    return true;
    }
    这样重载OnEraseBackground时,显示不太正常?
    双缓冲该如何实现?
      

  7.   

    重载OnEraseBackground,直接return true; 
    ,在OnPain中,重绘你的整个窗口界面(先将背景重绘到内存DC上,然后一次bitblt到物理DC),那就一点也不会闪
      

  8.   

    在OnPain中,重绘你的整个窗口界面(先将背景重绘到内存DC上,然后一次bitblt到物理DC),那就一点也不会闪?
    能否据个例子?
      

  9.   

    CPaintDC dc(this);
    CreateCompatibleDC(dc);
    CreateCompatibleBitmap(....);
    dc.SelectObject(..); // 选进位图
    BitBlt()贴图