MyView:public CFormView我自定义了一个formview视,在上面放了个CTabctrl控见,属性页上放了CMSFLEXGRID控见我想让其在窗口改变大小时充满视图。但Movewindow放在onpaint里闪烁得很严重我想放在ondraw里,但自定义视图在初始化时没有默认执行ondraw这是为什么???
而系统默认的视图初始化时自动执行了ondraw?请问各位,要如何做才能避免闪烁???

解决方案 »

  1.   

    Movewindow放在onpaint里闪烁得很严重????
    Movewindow放在onpaint?
    为了避免闪烁,应该在OnDraw/OnPaint中使用双缓冲。你不需要映射WM_PAINT,直接在OnDraw中写代码就行了。(MFC已经为你映射了WM_PAINT,对于CFormView并直接调用了OnDraw)
    系统默认的视图初始化时自动执行了ondraw,执行OnDraw中的代码与系统初始化无关,它是在窗口需要重绘时执行。
      

  2.   

    应该是OnSize中吧?还有记得使用WS_CLIPCHILDREN
      

  3.   

    但我自定义的视图屏蔽掉opaint后,ondraw没响应啊。各位老大帮帮忙。啊
      

  4.   

    DentistryDoctor(My heart will fly,in the sky.) 先生,您还在吗,我的自定义formview没有反应啊。
     请您帮帮忙吧。我立刻放分。
      

  5.   

    哦现在ondraw有反应了,不过还是闪得厉害,不知道怎么解决,双缓冲,嘿嘿,不懂啊,各位老大帮帮忙。
      

  6.   

    响应消息WM_SIZE,
    在OnSize里用MoveWindow(...)
      

  7.   

    Ondraw(CDC *PDC)
    {
     
             
             CRect rect;
    this->GetWindowRect(&rect);
    this->ScreenToClient(&rect);
    rect.OffsetRect(2,2);
    m_Tab.MoveWindow(&rect);
    CRect rect1;
    m_Tab.GetClientRect(&rect1); 
    rect1.top=rect1.top+20; 
    m_page1->MoveWindow(&rect1); 
    m_page2->MoveWindow(&rect1);  m_page3->MoveWindow(&rect1);
    }请各位老大看一下该怎么该。
    楼上得兄台,您有源代码吗?
    为什么我在debug方式下,在onsize里使用movewindow出现系统错误,而release下面正常?
      

  8.   

    为什么要把MoveWindow放到OnDraw里面??在OnSize 里面处理不就行了么
    在FormView的OnSize里面将TabControl充满客户区然后从CTabControl继承一个,同样处理OnSize,将各个页面的控件也使用MOVEWINDOW来充满TabControl客户区,
      

  9.   

    楼上的兄台,我在Onsize里用不了MoveWindow怎么回事,一用就出错,哪里有这方面的例子吗?
    兄台如果肯帮忙200分,全给您。
      

  10.   

    还有,从CTabControl里继承的新类怎么映射WM_SIZE消息,只能手工写吗?
      

  11.   

    因为可能还没有创建的时候也会父窗口就可能调用一次
    你必须加上这句话:
    if( m_tabCtrl.GetSafeHwnd() )
    {
      GetClientRect(..);
      m_tabCtrl.MoveWindow(...)
    }
      

  12.   

    可以从classwizars里面找到WM_SIZE,添加就OK了,
    实在不行,你分别拷贝一下CFormView的OnSize的声明,映射,和定义就可以了
    如果你不想继承,那么可以试试这样
    if( m_tabCtrl.GetSafeHwnd() )
    {
      GetClientRect(..);
      m_tabCtrl.MoveWindow(...);
      
      m_tabCtrl.GetClientRect(.. );
      if ( m_page.GetSafeHwnd() )
     {
      m_page.MoveWindow(.. )
    }
    }
      

  13.   

    窗口嵌套的时候经常会这样连续的处理在OnSize中MoveWindow,
    应该不会闪的
      

  14.   

    结不了贴,可以看看这个先:
    http://community.csdn.net/Expert/topic/4252/4252046.xml?temp=.4188196
      

  15.   

    http://community.csdn.net/Expert/topic/4270/4270821.xml?temp=.1048242来这边,这有一百分,应该能结。