CMainFrame::OnCreateClient中使用两个CSplitterWnd变量完成窗口切分。m_wndSplitter先将客户区切分为两列,左右各占一半。然后再用m_wndSplitter_new将左边的一半切分为两行。至此,有1(左上),2(左下),3(右边)。遇到的问题是程序启动后,3号窗口没有占据一半区域 貌似占据了整个客户区,需要将m_wndSplitter控件向右拖动,左边的连个1,2号窗口才能显示出来。我的目的是程序启动后,就按照我设置的大小,1和2号各种四分之一,合起来占据客户区一半(左边),3号窗口占据客户区一半(右边)。
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
if(!m_wndSplitter.CreateStatic(this, 1, 2))
{
return FALSE;
} CRect rect;
GetClientRect(&rect);
if(!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CStudentView),
CSize(rect.Width() / 2, rect.Height()), pContext))
{
return FALSE;
} if (!(m_wndSplitter_new.CreateStatic(&m_wndSplitter,
2, 1, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 0))))
{
return FALSE;
} if(!m_wndSplitter_new.CreateView(0, 0, RUNTIME_CLASS(CTeacherView),
CSize(rect.Width() / 2, rect.Height() / 2), pContext)
|| !m_wndSplitter_new.CreateView(1, 0, RUNTIME_CLASS(CContentView),
CSize(rect.Width() / 2 , rect.Height() / 2), pContext))
{
return FALSE;
} return TRUE;
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
if(!m_wndSplitter.CreateStatic(this, 1, 2))
{
return FALSE;
} CRect rect;
GetClientRect(&rect);
if(!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CStudentView),
CSize(rect.Width() / 2, rect.Height()), pContext))
{
return FALSE;
} if (!(m_wndSplitter_new.CreateStatic(&m_wndSplitter,
2, 1, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 0))))
{
return FALSE;
} if(!m_wndSplitter_new.CreateView(0, 0, RUNTIME_CLASS(CTeacherView),
CSize(rect.Width() / 2, rect.Height() / 2), pContext)
|| !m_wndSplitter_new.CreateView(1, 0, RUNTIME_CLASS(CContentView),
CSize(rect.Width() / 2 , rect.Height() / 2), pContext))
{
return FALSE;
} return TRUE;
}
例如m_wndSplitter.SetColumnInfo(0,330,10)
CSplitterWnd::SetColumnInfo
CSplitterWnd::RecalcLayout