在CMainFrame.cpp中做了个三分视图 
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext) 
{//分割2X1窗口,左边二行,右边一列 
    CRect rect; 
GetClientRect(&rect); 
    if(m_wndSplitter1.CreateStatic(this,1,2)==NULL) return FALSE; 
    m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(ChtmlV),CSize(rect.Width()/4,rect.Height()),pContext); 
    if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,0))==NULL)//从第一次分割的窗口中,再分割 
  return FALSE; 
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CMytoolView),CSize(rect.Width()*3/4,rect.Height()*4/5),pContext); 
m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(infoscrol),CSize(rect.Width()/4,rect.Height()*1/5),pContext);   m_wndSplitter1.SetColumnInfo( 0,rect.Width()*3/4,0 ); 
m_wndSplitter1.RecalcLayout(); 
  return TRUE;//不再调用基类的OnCreateClient函数 //  return CFrameWnd::OnCreateClient(lpcs, pContext); 

void CMainFrame::OnEDITDownSoft()  //切换成CHtmlView类窗口 

    CRect rect; 
GetClientRect(&rect); 
m_wndSplitter1.DeleteView(0,1);//删掉原有视图 
m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(ChtmlV),CSize(rect.Width()/2,rect.Height()),&pt);//ChtmlV是继承CHtmlView类 
ChtmlV *View =(CAdver1 *)m_wndSplitter1.GetPane(0,1); 
View->Navigate2("http://www.kukustat.com/download.html",0,NULL); 
m_wndSplitter1.SetColumnInfo( 0,0,0); 
m_wndSplitter1.RecalcLayout(); 
} void CMainFrame::OnEditMon() //切换成CTreeView类窗口 

CRect rect; 
GetClientRect(&rect); m_wndSplitter1.DeleteView(0,1);//删掉原有视图 
    m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CTreeV),CSize(rect.Width()/2,rect.Height()),&pt); 
m_wndSplitter1.SetColumnInfo( 0,rect.Width()*2/3,0);//重新设置右边窗口大小为整个框架窗口的2/3 
m_wndSplitter1.RecalcLayout();//重新布局 

问题描述:编译都正常通过。 
1)先执行OnEditMon(),再执行OnEDITDownSoft(),能正常切换。 
2)先执行OnEDITDownSoft(),然后在切换出的CHtmlView窗口中作浏览网页动作后,再执行OnEditMon(),则运行出错。 
3)先执行OnEDITDownSoft(),但在切换出的CHtmlView窗口中不作浏览网页动作(如点击网页中的链接等),再执行OnEditMon(),能正常切换。 
这是怎么回事呢??? 
 

解决方案 »

  1.   

    上面很奇怪,
    m_wndSplitter1.DeleteView(0,1);//删掉原有视图 
        m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CTreeV),CSize(rect.Width()/2,rect.Height()),&pt); 此处CTreeV如果换成CAdver1,即类型不变,那就可以正常转换、运行;
    如果将ChtmlView类型切换成其它类型就会运行出错。
      

  2.   

    CMainFrame::OnCreateClient()里面
    //创建一个开始时显示的视图
    if (!m_wndSplitter3.CreateView(0,0,RUNTIME_CLASS(COutPutEditView),CSize(100,50),pContext)) 

    m_wndSplitter3.DestroyWindow(); 
    return FALSE; 

          m_pOutPut = (COutPutEditView *)m_wndSplitter3.GetPane(0,0);
    //再创建一个备用视图m_pShowRevBuf = new CShowRevBufView();
    m_pShowRevBuf->Create(NULL, NULL, WS_VISIBLE|WS_CHILD, CRect(0, 0, 10, 10), this, 1000, pContext);
    m_pShowRevBuf->ShowWindow(SW_HIDE);
    在视图切换函数中
    DWORD id = m_wndSplitter3.IdFromRowCol(0, 0);
    CWnd *pWnd = m_wndSplitter3.GetPane(0,0);
    pWnd->SetDlgCtrlID(id+1);
    pWnd->ShowWindow(SW_HIDE);
    pWnd->SetParent(this);
    pWnd->UpdateWindow();
            static int nDownViewType= 0;
    if(nDownViewType%2 == 0)
    {
    m_pShowRevBuf->SetDlgCtrlID(id);
    m_pShowRevBuf->ShowWindow(SW_SHOW);
    m_pShowRevBuf->SetParent(&m_wndSplitter3);
    m_pShowRevBuf->UpdateWindow();
    }
    if(nDownViewType%2 == 1)
    {
    m_pOutPut->SetDlgCtrlID(id);
    m_pOutPut->ShowWindow(SW_SHOW);
    m_pOutPut->SetParent(&m_wndSplitter3);
    m_pOutPut->UpdateWindow();
    }
    m_wndSplitter3.SetActivePane(0, 0);
    m_wndSplitter3.RecalcLayout();
    nDownViewType++;
      

  3.   

    很奇怪, 
    m_wndSplitter1.DeleteView(0,1);//删掉原有视图 
        m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CTreeV),CSize(rect.Width()/2,rect.Height()),&pt); 此处CTreeV如果换成CAdver1(是ChtmlView类型),即类型不变,那就可以正常转换、运行; 
    如果将ChtmlView类型切换成其它类型就会运行出错。有高手知道这是什么原因导致的吗?
      

  4.   

    这么大的CSDN,难道真没有人能解决这个问题题,能解决的话,再加分。已经很长时间了。。