MFC界面闪屏 一个主界面有自绘的static控件 用来显示视频流 
显示视频的时候用的是双缓冲的 界面不动的话视频和主界面不会闪动
但是一旦窗口覆盖或者有窗口逗留在界面上的时候就会出现以下刷屏
严重的话 视频的小窗口都不见了 视频窗口有10个左右覆盖在主界面上的
这个刷屏问题怎么解决呢

解决方案 »

  1.   

    如果你的程序里有OnDraw函数,在里面加上绘制视频窗口的代码里加上Invalidate(FALSE);试试,或者重载OnSetFocus函数及OnLeaveFocus函数,在里面用Incalidate(FALSE)试试或手工刷新部分窗口
      

  2.   

    怀疑你用的不是CStatic控件的DC画的,就会造成这个情况。
      

  3.   

    用的Graphics 直接DrawImage的 我也怀疑是不是因为这个
      

  4.   

    试试这个:        Image* m_pImage;
    //指向图片控件的DC
    CDC* m_pImageDC;
    //内存兼容DC
    CDC m_memDC;
    //内存兼容位图
    CBitmap m_memBmp;
            // 绘制图片到图形控件
    void CChangeThemeDlg::DrawImage(void)
    {
    if(m_pImage==NULL)
    return;
    if(m_pImageDC==NULL)
    m_pImageDC=m_imageCtrl.GetDC();
    CRect rcCtrl;
    m_imageCtrl.GetClientRect(&rcCtrl);
    if(m_memDC.GetSafeHdc()==NULL)
    m_memDC.CreateCompatibleDC(m_pImageDC);
    if(m_memBmp.GetSafeHandle()==NULL)
    m_memBmp.CreateCompatibleBitmap(m_pImageDC,rcCtrl.Width(),rcCtrl.Height());
    CBitmap* pBmp=m_memDC.SelectObject(&m_memBmp);
    Graphics grap(m_memDC.GetSafeHdc());
    grap.DrawImage(m_pImage,0,0,rcCtrl.Width(),rcCtrl.Height());
    m_pImageDC->BitBlt(0,0,rcCtrl.Width(),rcCtrl.Height(),&m_memDC,0,0,SRCCOPY);
    m_memDC.SelectObject(pBmp);
    }DrawImage放到OnPaint里面:
          else
    {
    CDialog::OnPaint();
    DrawImage();
    }
      

  5.   

    我现在很奇怪 对话框里面自绘的控件是怎么显示出来的 调用onpaint吗 但是何时控件调用自带的onpaint呢
      

  6.   

    父窗口初始化时添加风格 ModifyStyle(0, ws_clipChildren);
      

  7.   

    父窗口初始化时添加风格 ModifyStyle(0, ws_clipChildren);