有个问题,我有一个MDI的工程,想实现一个Doc能对应多个View的功能,我的数组都放在Doc类中,当一个View关闭后,Doc类中的数组内容还保存,再新建一个View后,仍然能使用原来的数据,请指教我这样处理
void CResView::OnInitialUpdate()
{
    CFormView::OnInitialUpdate();
    ResizeParentToFit();    CResEditorDoc *pDoc = GetDocument();
    if (pDoc->m_Array.GetSize() == 0)
    {
        AfxMessageBox("Is 0!!!");
        m_ButtonResID = ID_MIN_GFXBUTTON_RANGE;
        m_TxtResID = TXT_RES_ID_START;
    }
    else
    {
        m_ButtonResID = (pDoc->GetResIDElementByIndex(pDoc->m_Array.GetSize() - 1))->res_resID ++;    }}
不行因为我知道默认一个文档对应一个视图,大家多指点,顺祝国庆快乐,来者都有分,谢谢!

解决方案 »

  1.   

    1.UpdateAllViews()可以同步更新所有视图的数据
    2.
    OnClose()
    {
     memset(m_Array,0,sizeof(m_Array));
    }
      

  2.   

    楼上的大侠能不能解释一下啊,我有点糊涂,谢谢我现在用我上面写的方法,怎么关闭childframe,再新建一个后,原来存在doc中的array中的数据都没有了,如何保存啊,谢谢
      

  3.   

    因为我想一次只能新建一个childframe
      

  4.   

    把数据保存到CDoc中,怎么会没有呢,不明白
    保存数据是怎么写的
      

  5.   

    我直接调用pDoc->Add()到数组中,该数组声明在Doc类中,我在View中操作的,当当前View没有关闭时候数组中有数据,关闭后再打开,数组为空,我想可能是一个View对应一个Doc吧,但是不知道它是怎么释放的?难道只能开全局变量?不明白
      

  6.   

    CSingleDocTemplate* pDocTemplate;
    pDocTemplate1 = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CViewDoc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CViewView1));
    AddDocTemplate(pDocTemplate1); CSingleDocTemplate* pDocTemplate;
    pDocTemplate2 = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CViewDoc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CViewView2));
    AddDocTemplate(pDocTemplate2);
      

  7.   

    一个文档是可以对应多个视图的
    我想你出错的原因是在开第二个视图的时候重新new了文档的对象,你取出的内容并不是第一个视图保存的内容
      

  8.   

    大侠,我是这样的,
    CChildFrame::CChildFrame()
    {
        // TODO: add member initialization code here
        nScreenSizeX = 0;
        nScreenSizeY = 0;    //Get size from Dialog
        if(IDOK == m_pSSSDlg.DoModal())
        {
            nScreenSizeX = m_pSSSDlg.nSizeX;
            nScreenSizeY = m_pSSSDlg.nSizeY;
        }
    }BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
        // TODO: Modify the Window class or styles here by modifying
        //  the CREATESTRUCT cs    if( !CMDIChildWnd::PreCreateWindow(cs) )
            return FALSE;    //set MDIChildFrame style
        cs.style &= ~WS_MAXIMIZEBOX;
        cs.style &= ~WS_MINIMIZEBOX;
        cs.style &= ~WS_THICKFRAME;
        
        //Set CREATESTRUCT structure
        if(IsSizeSelected())
        {
            cs.cx = nScreenSizeX;
            cs.cy = nScreenSizeY;
            m_GUILanguage = nLanguage;        return TRUE;
        }
        else
        {
            return FALSE;
        }
    }先弹出一个Dialog框,取得设定的大小,然后置入,应该可以吧,好像没有重新new啊?谢谢
      

  9.   

    CView.cpp中类似这样的语句
    pDoc->XXX = nScreenSizeX;
    有吗?
    如果有的话,关注pDoc
      

  10.   

    没有,因为我没有把childframe的尺寸存在Doc类中,我是准备直接写到文件中,所以没有这样的操作,谢谢