我就想知道如何用csplitterwnd类去拆分SDI的单文档窗口。
现在框架类中声明了一个对象m_splitter
然后重载OnCreateClient添加代码
 m_splitter.CreateStatic(this,1,2);
m_splitter.CreateView(0,0,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
结果发现没变化
然后又加了加
m_splitter.SetColumnInfo
m_splitter.SetRowInfo
m_splitter.RecalcLayout();
这几个语句,还是没变化。
我实在找不到原因。

解决方案 »

  1.   

    兄弟,简单的办法,你用VC新建一个SDI程序,然后在建立新工程的过程中,可以选择将新工程创建为拆分窗口。然后你对比一下,你就可以很容易学会到底如何才能创建拆分窗口了。
      

  2.   

    m_splitter.CreateView(0,0,RUNTIME_CLASS(CmView),CSize(500,500),pContext); 
    m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext); 这两个值不能相同,CreateView是为分割视图分配View的,你两个值都是相同了,不允许。你应该新建一个View类,然后用其名字代替掉以上的第二个。当然还应该在MainFrame.cpp中包含其头文件
      

  3.   

    代码没什么问题,有下面这三行就够了。
    m_splitter.CreateStatic(this,1,2); 
    m_splitter.CreateView(0,0,RUNTIME_CLASS(CmView),CSize(500,500),pContext); 
    m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext); 
    是不是主窗口太小没有看到?注意看一下窗口的右边框是不是变粗了。
      

  4.   

    新工程用拆分窗口是用的动态拆分窗口,代码我也看了,我看不出来和我的有哪里有区别。
    拆分的窗口用相同的类应该是可以的。用新建的VIEW类我也用过了,还是不行的。
    头痛啊。
      

  5.   

    把你的代码发给我,很快帮你搞定。[email protected]
      

  6.   

    CmView这个类是什么?自己定义的吗?可能就是这个的原因.你传两个CFormView类进去看看
      

  7.   

    第一个CSize(500,500)改成CSize(0, 100)
    第二个CSize(500,500)改成CSize(0,0)试试
    代码应该没问提,应该还是窗口大小问题
      

  8.   


    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    { m_splitter.CreateStatic(this,1,2); 
    m_splitter.CreateView(0,0,RUNTIME_CLASS(CmView),CSize(500,500),pContext); 
    m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext);  return TRUE;// return CFrameWnd::OnCreateClient(lpcs, pContext);
    }
    }
    将OnCreateClient中的return CFrameWnd::OnCreateClient(lpcs, pContext);改为return TRUE;就可以了
      

  9.   

    把最后一句:
    return CFrameWnd::OnCreateClient(lpcs, pContext);
    改成:return TRUE;if (!m_Split.CreateStatic(this,1,2))
    return FALSE;
    if (!m_Split.CreateView(0,0,pContext->m_pNewViewClass,CSize(250,0),pContext))
    return FALSE;
    if (!m_Split.CreateView(0,1,RUNTIME_CLASS(CVideoView2),CSize(0,0),pContext))
    return FALSE;
    SetActiveView((CView *)m_Split.GetPane(0,0));
    return TRUE;
    //return CFrameWnd::OnCreateClient(lpcs, pContext);
    }
      

  10.   

    窗口分割操作是在框架类中实现的,它要重载CFrameWnd类中的OnCreateClient(……)方法,
    CFrameWnd类的OnCreateClient(……)方法是虚的。如下:
    protected:
        virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
    我们要实现窗口分割就应该重载该方法,所以当然不能再用 return CFrameWnd::OnCreateClient(lpcs, pContext);这一句了。这也就是为什么始终看不到窗口切分效果的原因。