In Doument :use POSITION *pos=GetFirstViewPosition()
            CView*=(CView*)pos->GetNextView()  maybe I mistake wrong word.
  In View    :use GetDoument()

解决方案 »

  1.   

    如果你要和视图类交换数据的话,我一般是在对话框的构造方法中把视图对象的指针传给它。
    在视类对象中,调用GetDocument()取得文档对象指针,通过该指针访问文档对象。
    在视类和文档类中可以调用AfxGetMainWnd()方法取得框架类的指针。
    在文档类中,通过UpdateAllView()方法通知视类对象,让视类对象响应文档对象的变化更新显示。
      

  2.   

    哈哈,我有一个简单的方法。首先确定一点,你弹出对话框的方式无非是点一个菜单项或一个工具按钮(其实两者可能已经是有对应的),那么这个对话框只有存在实体以后才能用DoModal函数或Create函数显示出的吧,所以可以在这两个函数之前把视图的指针传给对话框的某一个成员变量,然后在对话框里对这个指针操作就可以了吗?例如://在菜单中有一个菜单项的ID为IDC_SOMEDLG
    //CMyView接收IDC_SOMEDLG发来的菜单消息
    void CMyView::OnSomeDlg()
    {
       CMyDialog dlg;
       
       dlg.m_pParentWnd = this;
       if(dlg.DoModal() == IDOK)
       {
          //一些你OK要的操作
       }
       else
       {
         //一些你不OK的操作
       }
    }这种方法虽然看起来方便,但是要在CMyDlg.h文件里面加上#include "MyView.h",这会造成一问题,就是如果你非要在MyView.h里头要加上#include "MyDlg.h"的话就会编译出错。但是我个人认为一个对话框对象很少情况下要在整个程序生存期内都存在,所以在成员函数中作一个局部变量就可以了,正如上面程序段所定义那样,对话框只要点一下“确定”或“取消”它的使命就完毕了。这样做,#include "MyDlg.h"就可以加到MyView.cpp中减少头文件藕合的情况了。对于Doc-View的互访,市面上有大把的书,网上有大把的资料。呵呵
      

  3.   


    当前对话框的视图类 thisMDI:
    AfxGetApp()
    App->pDocTemplate->Doc->(Framewnd)View
    pos=GetFirstDocTemplate() GetNextDocTemplate(pos)
    pos1=GetFirstDoc() GetNextDoc(pos1)
    pos2=GetFitstView() GetNextView(pos2)
    GetActiveDoc()
    GetActiveView()
    .....
    go and don't trun back, you are today's victor