我建立了一个单文档,然后把窗口分成两个视图。一个是本来的View类,另一个是CFormView类。我怎么实现这两个类之间的通信呢。我看了一些文章说View类只能和Doc类安全的通信,所以CFormView类最好也和Doc类通信。不过请问大侠们具体我该写哪些程序呢?

解决方案 »

  1.   

    通常是把要传输的数据或指针储存在文档类里面,然后调用文档类的UpdateAllViews函数,在视图类的OnUpdate中响应。
      

  2.   

    也可以通过CSplitterWnd取得视图类指针直接访问。
      

  3.   

    //获得CMainFrame的指针, 
    CMainFrame * pMainFrm = (CMainFrame*)AfxGetMainWnd(); 
    //找到视图的指针 
    CxxxView * active = ((CxxxView *)pMainFrm->m_SplitterH.GetPane(0,1)); //获得视图的指针后,什么都好办啦
      

  4.   

    我想知道具体如何写代码啊?
    比如我新建了一个水平滚动条,我想当我拖动滚动条的时候能够改变在Doc类中的一个变量。我写了一下的程序:
    void C...FormView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    int icur;
    switch(nSBCode)
    {
    case SB_THUMBPOSITION:
    pScrollBar->SetScrollPos(nPos);
    break;

    case SB_LINEDOWN:
    icur = pScrollBar->GetScrollPos();
    icur = icur + 1;
    if(icur > 255)
    icur = 255;
    pScrollBar->SetScrollPos(icur);
    break;

    case SB_LINEUP:
    icur = pScrollBar->GetScrollPos();
    icur = icur - 1;
    if(icur < 0)
    icur = 0;
    pScrollBar->SetScrollPos(icur);
    break;

    case SB_PAGEDOWN:
    icur = pScrollBar->GetScrollPos();
    icur = icur + 10;
    if(icur > 255)
    icur = 255;
    pScrollBar->SetScrollPos(icur);
    break;

    case SB_PAGEUP:
    icur = pScrollBar->GetScrollPos();
    icur = icur - 10;
    if(icur < 0)
    icur = 0;
    pScrollBar->SetScrollPos(icur);
    break;
    }
    if (pScrollBar == &m_SBB)
    {
    m_Adjbright = pScrollBar->GetScrollPos();
    }
    UpdateData(false);
    CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    我是在该类中直接写如下的代码:
          C...Doc doc;
         doc.m_.... = m_Adjbright;
    还是要加入其它的一些函数?
    我看书上说视图对象只有一个与之关联的文档对象,它所包含的GetDocument函数允许应用程序由视图得到与之相联系的文档。CFormView类是从CView类派生而来,我是不是也要在CFormView中加入GetDocument函数呢?
      

  5.   


    意思是不是在CFormView类中直接与CView类进行通信而不需要再和Doc通信了?