有时需要把MFC程序分割为三个窗口,就需要进行两次分割。
比如,现在希望实现如下图所示的效果
就需要先将窗口分割为两行,再将第一行分割为两列。
代码如下:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
if (!m_MySplitter.CreateStatic(this, 2, 1))
{
return FALSE;
}
//CTest是对话框类
if (!m_MySplitter.CreateView(1,0,RUNTIME_CLASS(CTest),CSize(200, 200), pContext))
{
return FALSE;
}
if (!m_MySplitter1.CreateStatic(&m_MySplitter, 1, 2, WS_CHILD | WS_VISIBLE | WS_BORDER,
m_MySplitter.IdFromRowCol(0, 0)))
{
return FALSE;
}
//CEx02View是视图类
if (!m_MySplitter1.CreateView(0,0,RUNTIME_CLASS(CEx02View),CSize(200, 200), pContext))
{
return FALSE;
}
//CTest1是对话框类
if (!m_MySplitter1.CreateView(0,1,RUNTIME_CLASS(CTest1),CSize(200, 200), pContext))
{
return FALSE;
}
return TRUE;
}
运行上述代码,发现并未达到我们期望的效果,第二行占据了整个用户空间。
自然而然的想到,设置第二行的高度,语句如下
m_MySplitter.SetRowInfo(1, 200, 50);
再次运行程序,并未出现变化,跟踪调试发现上一行代码未发生作用,行属性没有被设置上。
因此猜测可能是SetRowInfo()只对第一行设置有效果,因此将上一条语句修改为
m_MySplitter.SetRowInfo(0, 200, 50);
果然达到效果!
以此类推,SetColInfo()只对第一列设置有效果