我想得到以下窗口分割,如何做?
------------------------------------
         CMessageView
------------------------------------
CCurrentPathView  |
----------------  |  CRemoteDirView
CLocalDirView     |
-------------------------------------
          CLogView
-------------------------------------我写的如下,不过出错了。faint!!!!BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext)
{
//以下语句创建窗口分割
if (!m_wndSplitter.CreateStatic(this, 4, 1)) 
    { 
        TRACE0("Failed to CreateStaticSplitter\n"); 
        return FALSE; 
    }     // 创建ftp消息窗口
    if (!m_wndSplitter.CreateView(0, 0, 
       RUNTIME_CLASS(CMessageView), CSize(0,100), pContext)) 
    { 
        TRACE0("Failed to create first pane\n"); 
        return FALSE; 
    }     // 创建一个有两列的窗口
    if (!m_wndSplitterPath.CreateStatic( 
        &m_wndSplitter,     // our parent window is the first splitter 
        1, 2,               // the new splitter is 1 rows, 2 column 
        WS_CHILD | WS_VISIBLE,  
        m_wndSplitter.IdFromRowCol(1, 0) 
            // new splitter is in the first row, 2nd column of first splitter 
       )) 
    { 
        TRACE0("Failed to create nested splitter\n"); 
        return FALSE; 
    }
//Create remote path view
if (!m_wndSplitterPath.CreateView(0, 1, 
        RUNTIME_CLASS(CRemotePathView), CSize(300, 300), pContext)) 
    { 
        TRACE0("Failed to create third pane\n"); 
        return FALSE; 
    }  //创建本地路径视图
if (!m_wndSplitterLocal.CreateStatic(
&m_wndSplitterPath,
2, 1,
WS_CHILD | WS_VISIBLE,
m_wndSplitterPath.IdFromRowCol(0, 0)))
{
TRACE0("Failed to create local path view splitter\n");
return FALSE;
}

if (!m_wndSplitterLocal.CreateView(0, 0,
RUNTIME_CLASS(CCurrentPathView), CSize(100,10), pContext))
{
TRACE0("Failed to create currentpath view\n");
return FALSE;
}

if (!m_wndSplitterLocal.CreateView(1, 0,
RUNTIME_CLASS(CLocalDirView), CSize(100, 300), pContext))
{
TRACE0("Failed to create localdir splitter \n");
return FALSE;
}
m_wndSplitter.SetRowInfo( 0,100,100);
    m_wndSplitter.SetRowInfo( 1,10,10);
    m_wndSplitter.SetRowInfo( 2,50,30);
    m_wndSplitter.SetColumnInfo(0,50,30);
//创建log窗口
if (!m_wndSplitter.CreateView(2, 0,
RUNTIME_CLASS(CLogView), CSize(0, 100), pContext))
{
TRACE0("Failed to create log pane\n"); 
        return FALSE; 
}

m_wndSplitterPath.RecalcLayout();
m_wndSplitter.RecalcLayout();
return TRUE;
}

解决方案 »

  1.   

    debug在这停了:
    ASSERT(pView != NULL);  // panes can be a CWnd, but are usually CViews不过我那个确实是CView派生的。
      

  2.   

    ps:我有一个EDIT CONTROL。我把他改成READONLY,结果背景就变灰了。我怎么能让他是白色的背景同时又是READONLY的呢?
      

  3.   

    if (!m_wndSplitter.CreateStatic(this, 4, 1))
                                      应该是3吧
      

  4.   

    if (!m_wndSplitter.CreateStatic(this, 3, 1)) 
        { 
            TRACE0("Failed to CreateStaticSplitter\n"); 
            return FALSE; 
        }     // 创建ftp消息窗口
        if (!m_wndSplitter.CreateView(0, 0, 
           RUNTIME_CLASS(CMultiViewView), CSize(0,100), pContext)) 
        { 
            TRACE0("Failed to create first pane\n"); 
            return FALSE; 
        } 
        if (!m_wndSplitter.CreateView(2, 0, 
           RUNTIME_CLASS(CMultiViewView), CSize(20,100), pContext)) 
        { 
            TRACE0("Failed to create first pane\n"); 
            return FALSE; 
        } 

    if(!m_wndMidSplitter.CreateStatic(&m_wndSplitter, 1, 2,WS_CHILD | WS_VISIBLE,m_wndSplitter.IdFromRowCol(1, 0) ))
    {
            TRACE0("Failed to CreateStaticSplitter\n"); 
            return FALSE; 
    }
        if (!m_wndMidSplitter.CreateView(0, 1, 
           RUNTIME_CLASS(CMultiViewView), CSize(20,100), pContext)) 
        { 
            TRACE0("Failed to create first pane\n"); 
            return FALSE; 
        } 
    if(!m_wndSmallSplitter.CreateStatic(&m_wndMidSplitter, 2, 1,WS_CHILD | WS_VISIBLE,m_wndMidSplitter.IdFromRowCol(0, 0) ))
    {
            TRACE0("Failed to CreateStaticSplitter\n"); 
            return FALSE; 
    }
        if (!m_wndSmallSplitter.CreateView(0, 0, 
           RUNTIME_CLASS(CMultiViewView), CSize(20,100), pContext)) 
        { 
            TRACE0("Failed to create first pane\n"); 
            return FALSE; 
        } 
        if (!m_wndSmallSplitter.CreateView(1, 0, 
           RUNTIME_CLASS(CMultiViewView), CSize(20,100), pContext)) 
        { 
            TRACE0("Failed to create first pane\n"); 
            return FALSE; 
        } 
    m_wndSplitter.SetRowInfo(0,100,10);
    m_wndSplitter.SetRowInfo(1,100,10);
    m_wndSplitter.SetRowInfo(2,100,10);
    m_wndMidSplitter.SetColumnInfo(0,100,10);
    m_wndMidSplitter.SetColumnInfo(1,100,10);
    m_wndSmallSplitter.SetRowInfo(0,100,10);
    m_wndSmallSplitter.SetRowInfo(1,100,10);
    m_wndSplitter.RecalcLayout();
    m_wndMidSplitter.RecalcLayout();
    m_wndSmallSplitter.RecalcLayout();