请教高手在单文档中,如何使Doc中更新的数据即时的传递给View中?即当DOC中某个变量在程序运行中发生改变后,将最新的值传递给View类中?
我在Doc中当该变量发生改变时使用UpdateAllViews(NULL),在View中用OnUpdate()来接收数据,但是不能接收到数据!!请问如何解决??

解决方案 »

  1.   

    在多视类的情况下使用UpdateAllViews(NULL)和在View中用OnUpdate(),是可以成功接收到数据的,但是为什么在SDI的情况下却不行??
      

  2.   

    你可以在View的头文件中,一般都有GetDocument()得到的指针,你可以用该指针得到文档中的数据
      

  3.   

    to:w_w_wQQ281344966() 
    这个我知道的!
    我是说Doc中的变量会不断的变化,我要把这个不断变化的数据传递给VIEW中
    在多视图中,一般是通过UpdateAllViews(NULL)来刷新各个视类,然后各个视类才能得到最新的数据!
    但是在SDI中为什么就不行了??
      

  4.   

    在Doc中有按钮响应函数:
    void CDrawTestDoc::OnTest()
    {
     m_test=123; //Doc中public成员变量

              UpdateAllViews(NULL);
    }
    在View中有OnUpdate()如下:void CDrawTestView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
    {
    // TODO: Add your specialized code here and/or call the base class
    CDrawTestDoc* pDoc = GetDocument();
    m_value=pDoc->m_test;
    }
    在断点调试时发现程序一运行就到OnUpdate里执行了, UpdateAllViews(NULL);根本不起到作用
      

  5.   

    你可以在Doc中使用SetModifyFlag()来设置修改标记。这时,MFC会自动调用与该Doc关联的视类来更新视图。
    当然了,如果你会操作文档管理器的话。你也可以及时更新你的视类。
    呵呵。
      

  6.   

    可以试试在DOC类中用INVALIDATE()函数,然后再VIEW类中的Ondraw()函数中获得文档指针,从而获得改变的量
      

  7.   

    TO:wangjingtaokkkkk() 
    是可以传递的,不过程序运行后要把窗体大小手动改变一下,让窗体发生重绘,然后结果就出来了,我在View中使用了INVALIDATE()函数能立即显示即时的数据了,但是前面显示过的数据不能擦除掉,只是用新的数据在同样位置代替了旧的数据。
    请教高人应该怎样刷新视图区?让先前在视图区显示的数据擦除掉再显示新的数据??
      

  8.   

    因为你没有调用视图基类的OnUpdate,所以不会刷新,加一句手动刷新就可以了。void  CDrawTestView::OnUpdate(CView*  /*pSender*/,  LPARAM  /*lHint*/,  CObject*  /*pHint*/)  
    {  
               //  TODO:  Add  your  specialized  code  here  and/or  call  the  base  class  
               CDrawTestDoc*  pDoc  =  GetDocument();  
               m_value=pDoc-  >m_test;  
               Invalidate();//加一句
    }  
      

  9.   

    TO:Mackz(在相互)
    果然厉害,我就是少了 Invalidate();这一句了
    但是我加上以后,仍然有个问题存在:
     因为我是把这个动态变化的数据从Doc里即时获得并在视类里用TextOut显示出来,我这样写好后运行,发现新的数据把以前的数据覆盖掉了,如果前一个数据很长就能看出来,但如果我手动重绘窗体后就不存在先前的数据了,被擦除掉了。
     请教高手如何把先前的数据擦除掉?应该如何刷新?
      

  10.   

    你是说在Ondraw中显示doc中的数据吗
    设置要显示的数据长度可以吧