我建了一个单文档程序,首先通过文档关联了两个视图,可以互相切换。
然后我把第一个视图View1即当前活动视图用CSplitterWnd分割为一行两列(在MainFrame的OnCreateClient中)。
最后我想把当前处于隐藏状态的另一个视图View2分割为两行一列,还是在OnCreateClient中,结果还是分割的还是当前活动视图View1。
无论怎样都无法分割另一个视类,请问是不是实现不了?如果可以,怎样实现呢?
不知道我说清楚没有啊?
请高手来答疑解惑!
谢谢

解决方案 »

  1.   

    对了,忽然看到,用CSplitterWnd分割的是框架对吧?
    那切换视后就无法再进行分割了,是不是这样?
      

  2.   

    xlzxlich(阳光) :
    如果可以的话,可否提示一下该怎么做?
      

  3.   

    需要另外再建一个splitterwnd,才能实现分割!
      

  4.   

    我试了,又建了一个SplitterWnd,还是先CreateStatic(this,2,1),然后CreateView.结果分割的还是当前视图,切换视类后并不出现分割状态。请问我哪里错了吗?
      

  5.   

    如果你一定要做成单文档的话,那只有动态切换视图.首先建好若干个视图,再在适当的时候显示,手动控制.还有就是csplitterwnd里createview不只是可以配视图,也可以配一个frame.而且,csplitterWnd也是可以切分视图的.所有,你的需求还是可以实现的.
      

  6.   

    MSDN 里边 有个ViewEx的例子,你可以参考一下.另外,CreateView 的参数要传第二个视图. RUNCLASS(CView2)
      

  7.   

    #include "ViewOne.h"
    #include "ViewTwo.h"
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    m_wndSplitter1 = new CSplitterWnd();

    BOOL bCreateSpltr = m_wndSplitter1->CreateStatic( this, 1, 2); m_wndSplitter1->CreateView(0, 0, RUNTIME_CLASS(CViewOne), CSize(100,100), pContext);
    m_wndSplitter1->CreateView(0, 1, RUNTIME_CLASS(CViewOne), CSize(100,100), pContext); return bCreateSpltr;
    }void CMainFrame::OnChangeview() 
    {
    bchange = !bchange; bchange ? SetViewTwo() : SetViewOne();
    }void CMainFrame::SetViewOne()
    {
    m_pNewView = RUNTIME_CLASS(CViewOne);

    Context.m_pNewViewClass = m_pNewView;
    Context.m_pCurrentFrame = this;
    Context.m_pCurrentDoc = GetActiveDocument();

    CView *pNewView = STATIC_DOWNCAST(CView, CreateView(&Context));

    if(pNewView != NULL)
    {
    if(NULL == m_wndSplitter1) m_wndSplitter1 = new CSplitterWnd();
    if(m_wndSplitter1->CreateStatic( this, 1, 2))
    {
    m_wndSplitter1->CreateView(0, 0, RUNTIME_CLASS(CViewOne), CSize(300,0), &Context);
    m_wndSplitter1->CreateView(0, 1, RUNTIME_CLASS(CViewOne), CSize(0,0), &Context);
    }
    pNewView->OnInitialUpdate();
    pNewView->ShowWindow(SW_SHOW);
    SetActiveView(pNewView);
    RecalcLayout();

    m_wndSplitter2->DestroyWindow();
    m_wndSplitter2 = NULL;
    }
    }void CMainFrame::SetViewTwo()
    {
    m_pNewView = RUNTIME_CLASS(CViewTwo);

    Context.m_pNewViewClass = m_pNewView;
    Context.m_pCurrentFrame = this;
    Context.m_pCurrentDoc = GetActiveDocument();

    CView *pNewView = STATIC_DOWNCAST(CView, CreateView(&Context));

    if(pNewView != NULL)
    {
    if(NULL == m_wndSplitter2) m_wndSplitter2 = new CSplitterWnd();
    if(m_wndSplitter2->CreateStatic( this, 1, 2))
    {
    m_wndSplitter2->CreateView(0, 0, RUNTIME_CLASS(CViewTwo), CSize(300,0), &Context);
    m_wndSplitter2->CreateView(0, 1, RUNTIME_CLASS(CViewTwo), CSize(0,0), &Context);
    }
    pNewView->OnInitialUpdate();
    pNewView->ShowWindow(SW_SHOW);
    SetActiveView(pNewView);
    RecalcLayout();

    m_wndSplitter1->DestroyWindow();
    m_wndSplitter1 = NULL;
    }
    }
      

  8.   

    在vckbase里面 vc知识库里面有很多静态分割的方法和代码 下个看看就行