我在Form中拉了一个DWGTrueView的控件(这是一个可以显示DWG文件的控件,安装了DWG TrueView 2008就有的),可以正常显示DWG文件,当我改变窗口大小或最小化窗口时会闪烁,应该是重绘引起的,请问有什么办法解决吗?闪烁也没多大问题,只是闪烁之后显示不正常,看不到DWG图,要重新最小化最大化之后才能看到!

解决方案 »

  1.   

    让背景不刷新瞧瞧 invalidateRect(&RECT,false); 缩小你的无效区 不刷整个背景 让控件区域属于有效区看看。
      

  2.   

    我重载了OnEraseBkgnd()
    BOOL CMainFrame::OnEraseBkgnd(CDC* pDC)
    {
      return -1;
      //return CFrameWnd::OnEraseBkgnd(pDC);
    }
    但还是没用,还是会重绘背景的
      

  3.   

    父窗口加上WS_CLIPCHILDREN样式。
      

  4.   

    我的是基于FormView的SDI,重载OnEraseBkgnd()是在主框架类中吗?
      

  5.   

    我在主框架类中的PreCreateWindow()中加入了cs.style |= WS_CLIPCHILDREN;,但还是会重绘啊!
      

  6.   


    试试为 FormView 添加 WS_CLIPCHILDREN 风格。
      

  7.   

    还是不行,我是看了这篇文章http://www.itwis.com/html/c/ctool/20080512/1484.html,照着上面的第二步做的,但还是会重绘背景
      

  8.   

    关于重绘是闪烁的处理方法
    1、子窗口引起的闪烁,父窗口可以尝试使用WS_CLIPCHILDREN样式解决
    2、CS_VREDRAW,CS_HREDRAW,分别表示纵向和横向大小改变时,重绘整个窗口
    3、WM_ERASEBACKGROUND优化
    4、InvalidateRect取代Invalidate
    5、双缓冲。
      

  9.   

    先获得控件的矩形区域  然后 invalidateRect