我做了一个切分窗口,希望能够控制该切分窗口,使其能够创建不同的View类。在
CMainFrame中的BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)函数中,有如下语句:if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(220, 100), pContext) || !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CSDCS_NCManagerView), CSize(100, 100), pContext))
{
    m_wndSplitter.DestroyWindow();
    return FALSE;
}我在该语句之后加入另外两句话:
    m_wndSplitter.DeleteView(0,1) ;//删除右边的CSDCS_NCManagerView
    m_wndSplitter.CreateView(0,1, RUNTIME_CLAS(CRemoteStationCtrlView),   
            CSize(100,100), pContext ) ; //创建一个新的FormView。上面是可以的,但是,我在别的函数中调用上述两个语句却出错,不知道如何是好。
切盼那位高人能够不吝赐教!!!  急。

解决方案 »

  1.   

    m_wndSplitter.DeleteView(0,1) ;//删除右边的CSDCS_NCManagerView
        m_wndSplitter.CreateView(0,1, RUNTIME_CLAS(CRemoteStationCtrlView),   
                CSize(100,100), pContext ) ; //创建一个新的FormView。
    其它函数下你的这个pContext参数要么没有定义,要不该结构赋值不正确。
      

  2.   

    我在CMainFrame中定义了一个private的CCreateContext* thepContext ; 然后在OnCreateClient()中进行赋值:
       thepContext = pContext;
    然后在别的函数中使用:
    m_wndSplitter.DeleteView(0,1) ;//删除右边的CSDCS_NCManagerView
        m_wndSplitter.CreateView(0,1, RUNTIME_CLAS(CRemoteStationCtrlView),   
                CSize(100,100), thepContext ) ; //创建一个新的FormView。
    经跟踪得知,thepContext 和 原来赋值时一样。
      

  3.   

    你要是使用没有文档的视图,你可以置pContext为NULL
      

  4.   

    ysf1980:我将pContext设为NULL, 程序运行的时候不报错了,但是却出现了一个奇怪的现象,LeftView上(左上方)出现了一个窗口,还带有滚动条。奇怪呀!!!但是还是要感谢各位。希望各位继续出谋划策。
      

  5.   

    上面并不奇怪,那个窗口就是新创建出来的VIEW。CCreateContext* thepContext;
    thepContext = pContext;//thepContext是指向pContext的指针。
    //其它函数中pContext已不存在,所以thepContext也无效了。//定义成CCreateContext thepContext;再赋值就行了。不要使用指针
      

  6.   

    切换窗口后,记得调用
    m_wndSplitter.RecalcLayout();
      

  7.   

    特别感谢所有参与本贴的同志们!!!特别感谢ysf1980同志。本人的问题在各位的帮助下,已经解决!再次感谢各位!