想编写一个程序实现下图所示的视窗分割,思路是先将视窗分为左右两列,然后将左侧分割为上下两行,右侧分割为左右两列。结果一直未能成功,分割后的效果和第一次分割的效果一样,只显示左右两列的分割。
---------------------------------------------------
| |
------------------| |
| |
-----------------------------------------------------
错误的代码为:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
// 整体左右分栏
if (m_spliterwnd.CreateStatic(this,1,2)==NULL)
{
return FALSE;
}
if (!m_spliterwnd.CreateView(0,0,RUNTIME_CLASS(CSplitWindowView),CSize(400,100),pContext))
{
return FALSE;
}
if (!m_spliterwnd.CreateView(0,1,RUNTIME_CLASS(CSplitWindowView),CSize(100,100),pContext))//
{
return FALSE;
}
//上下分栏
if (m_SplitUpDown.CreateStatic(&m_spliterwnd,2,1,WS_CHILD|WS_VISIBLE|WS_BORDER,m_spliterwnd.IdFromRowCol(0,0))==NULL)
{
return FALSE;
}
if (!m_SplitUpDown.CreateView(0,0,RUNTIME_CLASS(CSplitWindowView),CSize(200,200),pContext))
{
return FALSE;
}
if (!m_SplitUpDown.CreateView(1,0,RUNTIME_CLASS(CSplitWindowView),CSize(200,200),pContext))//
{
return FALSE;
}
//左右分栏
if (m_SplitRL.CreateStatic(&m_spliterwnd,1,2,WS_CHILD|WS_VISIBLE|WS_BORDER,m_spliterwnd.IdFromRowCol(0,1))==NULL)
{
return FALSE;
}
if (!m_SplitRL.CreateView(0,0,RUNTIME_CLASS(CSplitWindowView),CSize(200,400),pContext))
{
return FALSE;
}
if (!m_SplitRL.CreateView(0,1,RUNTIME_CLASS(CSplitWindowView),CSize(200,400),pContext))//
{
return FALSE;
}
return TRUE;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}
经过查找资料发现,要想实现分割需把以下几句代码注释掉:
if (!m_spliterwnd.CreateView(0,0,RUNTIME_CLASS(CSplitWindowView),CSize(400,100),pContext))
{
return FALSE;
}
if (!m_spliterwnd.CreateView(0,1,RUNTIME_CLASS(CSplitWindowView),CSize(100,100),pContext))//
{
return FALSE;
}