我想切成左右两个窗口,有两个CFormView能显示在右边的窗口中,先显示一个,当点击切换时,这个view就被另一个view覆盖掉了。但就是这个view变到另一个view总是不行。请高手指点,谢谢!我用的destroywindow后再create另一个view不行,用CSplitter的Deleteview后再createview也不行,不知该如何才可以。

解决方案 »

  1.   

    你可以把右边的pane换成一个CFrameWnd的窗口,然后就可以在该framewnd中进行switch了
      

  2.   

    flyelf(空谷清音)兄,小弟照你的方法做了,可是还是不行。能不能说的具体一点:
    单文档:
    在App里有:
    pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CMarkDoc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CMarkView));
    然后在MainFrm的OnCreateClient有:
    BOOL result=m_wndSplitter.CreateStatic(this,1,2);
    result|=m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(Coutlook),CSize(100,100),pContext);
    result|=m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMarkView),CSize(924,100),pContext);

    我也新建了一个CFrameWnd,请问在哪儿将其与右面的Pane联系在一起?请老兄务必帮小弟一把,不胜感激!
      

  3.   

    void CMainFrame::OnSwitch() 
    {
    CView *pView = GetRightPane();
    if (pView == NULL)
    return; CRuntimeClass *pViewClass = NULL;
    if (pView->IsKindOf(RUNTIME_CLASS(CViewSwitchView)))
    {
    pViewClass = RUNTIME_CLASS(CRightFormView);
    }
    else if (pView->IsKindOf(RUNTIME_CLASS(CRightFormView)))
    {
    pViewClass = RUNTIME_CLASS(CViewSwitchView);
    }
    CRect rc;
    pView->GetWindowRect(&rc);
    m_wndSplitter.DeleteView(0, 1);
    CCreateContext context;
    context.m_pCurrentDoc = GetActiveDocument();
    context.m_pCurrentFrame = this;
    context.m_pLastView = NULL;
    context.m_pNewDocTemplate = NULL;
    context.m_pNewViewClass = pViewClass;
    if (!m_wndSplitter.CreateView(0,1, pViewClass, rc.Size(), &context))
    ASSERT(FALSE); m_wndSplitter.RecalcLayout();
    }
    上面的情况是直接撤消原来的视图,只要把数据存到文档就可以了,切换其实就是重新运行RUNTIMECLASS
      

  4.   

    按yintongshun(踏雪有痕)兄的方法搞定,非常感谢。同时也谢谢 flyelf(空谷清音)兄,现在送分!