我看过《深入浅出MFC》里面说MDI下这样完成: (可我不知道SDI下怎么办,CChildFrame,pcontext在那里?不胜感激,谢谢!)
BOOL CChildFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
// 產生靜態分裂視窗,橫列為 1,縱行為 2。
m_wndSplitter1.CreateStatic(this, 1, 2);
// 產生分裂視窗的第㆒個窗口(標號 0,0)的 view 視窗,採用 CTextView。
m_wndSplitter1.CreateView(0, 0, RUNTIME_CLASS(CTextView),
CSize(300, 0), pContext);
// 產生第㆓個分裂視窗,橫列為2 縱行為1。位在第㆒個分裂視窗的(0,1)窗口
m_wndSplitter2.CreateStatic(&m_wndSplitter1, 2, 1,
WS_CHILD | WS_VISIBLE, m_wndSplitter1.IdFromRowCol(0, 1));
// 產生第㆓個分裂視窗的第㆒個窗口(標號 0,0)的 view 視窗,採用 CBarView。
m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CBarView),
CSize(0, 150), pContext);
// 產生第㆓個分裂視窗的第㆓個窗口(標號 1,0)的 view 視窗,採用 CGraphView。
m_wndSplitter2.CreateView(1, 0, pContext->m_pNewViewClass,
CSize(0, 0), pContext);
// 設定 active pane
SetActiveView((CView*)m_wndSplitter1.GetPane(0,0));
return TRUE;
}

解决方案 »

  1.   

    下面这段程序是我自己的一段程序,是SDI程序使用静态拆分窗口的一个例子,现在给你,希望对你有帮助。BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(!m_wndSplitter.CreateStatic(this,2,1))
    return FALSE;

    if(!m_wndSplitter.CreateView(1,0,
    RUNTIME_CLASS(CINFView),
    CSize(150,100),
    pContext)
    ||
    !m_wndSplitter.CreateView(0,0,
    RUNTIME_CLASS(CPFView),
    CSize(900,550),
    pContext))
    {
    m_wndSplitter.DestroyWindow();
    return FALSE;
    }

    return TRUE;
    }
      

  2.   

    把他写到mainfrm的OnCreateClient里就行。
      

  3.   

    能否再问一个简单的问题:
    我是要用4个View, 希望他们的大小锁定,不知道用什么函数,还有就是View的边框在哪里修改?我现在MFC很菜的,希望各位大侠不要见笑:)明天结分。
      

  4.   

    呵呵,重新写一个由CSpliiterWnd派生的类,响应WM_LBUTTONDOWN、WM_MOUSEMOVE和WM_SETCURSOR消息,实现一个可以锁定大小或改变大小的切分窗口类就好了。n个View是没有问题的。
      

  5.   

    难道CSpliiterWnd里没有现成的函数吗?
    我只需要一个2*2的View
    并且它们的大小一样就可以了。
      

  6.   

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    // TODO: Add your specialized code here and/or call the base class
              int cx = GetSystemMetrics(SM_CXSCREEN);
    int cy = GetSystemMetrics(SM_CYSCREEN); if(!m_wndSplitter.CreateStatic(this,2,2))
    return FALSE;

    if(!m_wndSplitter.CreateView(0,0,
    RUNTIME_CLASS(CYOURView1),
    CSize(cx/2,cy/2),
    pContext)
    ||
    !m_wndSplitter.CreateView(0,1,
    RUNTIME_CLASS(CYOURView2),
    CSize(cx/2,cy/2),
    pContext))
                      ||
    !m_wndSplitter.CreateView(1,0,
    RUNTIME_CLASS(CYOURView3),
    CSize(cx/2,cy/2),
    pContext))
                      ||
    !m_wndSplitter.CreateView(1,1,
    RUNTIME_CLASS(CYOURView4),
    CSize(cx/2,cy/2),
    pContext))
    {
    m_wndSplitter.DestroyWindow();
    return FALSE;
    }

    return TRUE;
    }