我建立了两个view ,但是没有同document联系起来,相互之间的数据转换仅仅是在view中转换,现在我又添加一个view,但是在我切换view的时候,数据不能同步。我分析了一下,数据仅仅实显示在view上,并没有写到view的内部,我想知道怎么样才能够再updateview的时候把数据更新到view中。谢谢了,在线等待

解决方案 »

  1.   

    不行的,这两个view和documenet之间没有联系
    仅仅是在view中自己切换
      

  2.   

    如果你使用的是视图/文档结构的话,请重载OnDraw(CDC* pDC)或OnPaint()
    在这两个函数中调用GetDocument();这时你就可以画你想画的所有内容.当文档内容改变时调用UpdateAllViews(this)即可使所有视图同步更新.
      

  3.   

    刚才没看清,应该这样改:
    把你所要画的内容放在CMainFrame 中;重载OnDraw(CDC* pDC)或OnPaint()
    在这两个函数中: CMainFrame* pFrame==(CMainFrame*)AfxGetApp().m_hMainFrame;然后你就可以画你想画的所有内容了.你没有必要在view 中保存数据.在各个view中都保存有一分指向其他各view 的指针.当在一个view中修改数据时同时向各个view 发送Invalidate().这时放在CMainFrame 中的内容就好象Document 一样.
    或者在CMainFrame中保存所有的view pointer.然后编一个UpdateAllViews().当在一个view中修改数据时同时向CMainFrame发送一个自定义消息,在CMainFrame 中响应该消息并调用自定义的UpdateAllViews().一个视不与Document联系是不能使用UpdateView的.
      

  4.   

    tomid(磨牙狼) 我是在单文档单视的框架中添加了一个view,而且这个view没有有和Document联系,两个view之间的联系就是它们自己的指针了。
    在切换view后,调用SetActivewView(),然后SetActivewView调用各个View的updateview()。在各个view中的updateview函数中,从指针得到另外一个view的数据,然后仅仅写在view的窗口中,view中没有这些数据。我想做的就是如何能够将这些数据update到view中。这段代码不是我写的,我也不想对架构做很大的改动
      

  5.   

    CDocument *pDC=Getdocument();pDC->UpdataAllViews();
      

  6.   

    怎么样才能够讲当前的view标示为活动的?
      

  7.   

    在框架窗口中:CFrameWnd::GetActiveView得到当前活动视指针 
      

  8.   

    在单文档结构中一个文档只能对应一个视图,如果想同时显示多个视,有两个方法可参考:
    1、使用分割窗口,这方面的资料多如牛毛。
    2、象VC的Workspace一样,你觉得如何?
    如果还不行的话,再看下面:
    1、先生成一个与文档相关联的视.
    2、在该视的OnCreate中生成其他不带Document 的视,并把文档指针一起保存在各个不带Doc的视中,同时在该文档中保存各视的指针。
    3、重载各个不带Doc的视的OnDraw,并把该函数的GetDocument()的两行去掉而使用自己的m_pMyDoc;这时你的工作已经完成一半了。
    4、为保证更新同步,你还得再做一点点工作。
    5、你不能直接使用UpdateAllViews来更新。
    6、自定义void CMyDocument::MyUpdateAllViews(CView* pView)
    {
    //假设Doc中保存有三个CView的指针CView* CMyDocument::m_pView[3]
    for(int i=0;i<3;i++)
    {
    if(m_pView[i]!=pView)pView->Invalidate();
    }
    }
    7、当某个视中修改数据后,m_pMyDoc->MyUpdateAllViews(this)来保证更新的同步。