我现在做一个MDI,其中的视图被分割为三部分,一行两列,第二列再分为两行一列,在一行一列这个地方(CView),放一个树Cmytree(CTreeCtrl类).
****************
CView*
     *CFormView
     *
     **********
     *
***************现在想要做的是:双击某一个叶子,在CFormView这个地方会显示不同的视图.

解决方案 »

  1.   

    响应CTreeView的
    OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
    函数 然后得到选中的树节点
    在得到CFormView的指针进行相应操作即可
      

  2.   

    http://community.csdn.net/Expert/topic/5106/5106325.xml?temp=.0638544
      

  3.   

    我这个是多文档.我只是想改变在CFormView这个区域内显示出的FormView,不是想改变整个视图的显示结构.有这样的例子吗?
      

  4.   

    显示不同的VIEW就是要切换视图的.并不改变结构.或者你在一个视图里把所有的控件什么的都生成好,再动态控制它的显示及位置,这样的话太烦了.
    所以,最好的就是切换视图.上面给你的链接就是用来做这个的.
      

  5.   

    void CMainFrame::SwitchToForm(int nForm)
    {    CView *pOldActiveView=GetActiveView();
        CView *pNewActiveView=(CView*)GetDlgItem(nForm);    if(pNewActiveView==NULL)
        {
            if(nForm==IDD_LIBRARY_FORM)
            {
                pNewActiveView=(CView*)new CLibraryView;
            }
            if(nForm==IDD_BOOKINFO_FORM)
            {
                pNewActiveView=(CView*)new CBookInfoView;
            }
            if(nForm==IDD_PROVIDER_FORM)
            {
                pNewActiveView=(CView*)new CProviderView;
            }        CCreateContext context;
            context.m_pCurrentDoc=pOldActiveView->GetDocument();
            pNewActiveView->Create(NULL,NULL,0L,CFrameWnd::rectDefault,this,nForm,&context);
            pNewActiveView->OnInitialUpdate();
        }    SetActiveView(pNewActiveView);
        pNewActiveView->ShowWindow(SW_SHOW);
        pOldActiveView->ShowWindow(SW_HIDE);    int ID;    if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CLibraryView))
            ID=IDD_LIBRARY_FORM;
        if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CBookInfoView))
            ID=IDD_BOOKINFO_FORM;
        if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CProviderView))
            ID=IDD_PROVIDER_FORM;    pOldActiveView->SetDlgCtrlID(ID);
        pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);    RecalcLayout();}
      

  6.   

    mdi 我是在CChildFrame里定义一个视图切换函数,
    SwitchToForm(int nForm)看上面的代码,不太明白,我的 例子要切换视图的地方上Formview
      

  7.   

    to raymonzhao:
    能不能解释一下上面的函数,我看不明白啊!
      

  8.   

    有了新进展...
    在CChildFrame里定义一个视图切换函数,
    ChangeView(int n),在
    void Cmytree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
    {...
    paritem=this->GetParentItem(curitem);
     pChild->ChangeView(0);
    .......} 
    里跳到ChangeView函数内部,
    void CChildFrame::ChangeView(int n)
    {
    CSplitterWnd * wndSplitter1;
    CChildFrame * pChild = (CChildFrame*)AfxGetMainWnd();
    wndSplitter1=&pChild->SplitterWnd02;
    wndSplitter1->DeleteView(0,0);

    if(n==0)
    {
    wndSplitter1->CreateView(0,0,RUNTIME_CLASS(CEPoint),CSize(100,300),NULL);
    }
    else if (n==1)
    {
    wndSplitter1->CreateView(0,0,RUNTIME_CLASS(CCMaster),CSize(100,300),NULL);
    }
    else if (n==2)
    {
    wndSplitter1->CreateView(0,0,RUNTIME_CLASS(CCSlave),CSize(100,300),NULL);
    } wndSplitter1->RecalcLayout();}
    但是执行到
    wndSplitter1->DeleteView(0,0);
    这一步就出错了,哪位高手告诉我该怎么写?出错信息为:access violation
      

  9.   

    为什么不能用DeleteView?
    wndSplitter1->DeleteView(0,0);我看到论坛上有建议用隐藏,具体怎么实现的呀?