我现在又一个单文档多视图的程序,已经建立好他们的关系,视图为CView1,CView2;
   
    表现为当前运行时,只显示一个视图,即CView1显示的时候CView2隐藏,他们之间也可以相互切换显示;    现在的问题是,我想要分割CView2,而不分割CView1 如何操作呢?

解决方案 »

  1.   

    分割时表现为两个view。你现在的view不够呀
      

  2.   

     这不是问题的关键,那好,我在提供2个View,继承自CView,分别为CView3,和CView4,我想要让CView3和CView4显示在CView2之中,可以一起和CView1在窗口切换显示 ,现在如何实现?
      

  3.   

    也就是说,应该有CView1、CView3、CView4;而CView2就不应该存在,对吧!
      

  4.   

    对,就是说主视图CView1和CView2不同时显示,是交换显示,而CVew3,CView4在CView2之中,和CView2是一个整体显示
      

  5.   

    那么,也就是说,你应该分割成3个view。不应该分割成4个view,只是在控制显示的时候,view3/view4控制相同!与view1的显示相反就可以了!
    你分割后,将view2/view3先不要显示,显示view1。
      

  6.   

    我做过。但没弄出来。V2的拆分没问题,关键是在切换时 V2显示v3 v4出 出问题,原因我猜想可能是与AFX_IDW_PANE_FIRST有关。关注下高人解决方案。
      

  7.   

    如果不想显示,那么,就设置他们的窗口大小为0!CWnd::MoveWindow;显示出来的,那么,当然设置当前的大小了!
      

  8.   

    只要在CView2的OnCreate()里面使用CSplitterWnd进行切分视图就可以了,没那么麻烦的的~
      

  9.   

    我做的切换实现,仅供楼主参考。
    m_pOldView =pFrameWnd->GetActiveView();
    if (pNewView != m_pOldView)
    { UINT nID = pNewView->GetDlgCtrlID();
    pFrameWnd->SetActiveView(pNewView);        //改变活动的视图
    pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    pNewView->ShowWindow(SW_SHOW);  //显示新的视图 if (m_pOldView)
    {
    m_pOldView->SetDlgCtrlID(nID);
    m_pOldView->ShowWindow(SW_HIDE);  //隐藏旧的视图
    } pFrameWnd->RecalcLayout();          //调整框架窗口
    pFrameWnd->Invalidate();
    }不过我觉得楼主可以考虑 fandh的方案。用隐藏/显示splitter的格子来实现切换。
      

  10.   


    CView2的OnCreate()里面写分割?如何写呢?我记着是在MainFrame的OnCreateClient里面写才对;
    这个方法看起来不错,不过我现在很多的视图,大体上有17个视图,这样做,恐怕不好吧
      

  11.   

    如果是和AFX_IDW_PANE_FIRST有关的话,那好办,可以吧hide的view的id改掉,然后把show的View的id改为AFX_IDW_PANE_FIRST,然后RecalcLayout(); 其他切分的还是照做。
      

  12.   

    你写的CView2直接从CView继承,然后在OnCreate()里拆分视图,同你以前在CMainFrame::OnCreateClient()里写的一样,不过要在拆分前加上
    CCreateContext context;
    context.m_pCurrentDoc = GetDocument();//与文档建立关联
    context.m_pCurrentFrame = GetTopLevelFrame();
    context.m_pLastView = this;
    context.m_pNewDocTemplate = NULL;然后使用context作为CSlpitterWnd::CreateView的最后一个参数
      

  13.   

    这么多的试图,如果每个都这么写一遍,每次切换的时候所有代码又要写一遍,这样做岂不是很麻烦?按照你的建议,我如下写:
    CCreateContext context; 
    context.m_pCurrentDoc = GetDocument();//与文档建立关联 
    context.m_pCurrentFrame = GetTopLevelFrame(); 
    context.m_pLastView = this; 
    context.m_pNewDocTemplate = NULL;  if(m_wndSplitter.CreateStatic(this,2,2)==NULL) 
    return FALSE;
    m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTrackingTestView),CSize         (100,100), &context); 
    m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CGanttView),CSize(100,100),&context); 结果是,程序运行,但窗口没有分割
      

  14.   

    这样呢
    if(m_wndSplitter.CreateStatic(this,1,2)==NULL)