创建一个MFC单文档应用程序命名为test
打开资源管理器Dialog,右击鼠标,插入两个对话框选择基于CFormView类
属性style改为child,broad改为none
在对话框中插入类,分别命名为cDialogData,cDialogA.
打开类视图,右击CMainFrm类,选择属性,重写OnCreateClient函数。
在MainFrm.h中加入CSplitterWnd m_wndSplitter;
CSplitterWnd m_wndSplitter2;的定义
在MainFrm.cpp中加入头文件DialogData.h和DialogA.h
在OnCreateClient函数中添加以下代码
// 创建静态分割窗口,一行两列
if(!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
//再把左边窗口分为两行一列
if(m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,
m_wndSplitter.IdFromRowCol(0, 0))==NULL)
return FALSE; //将第0行0列再分开2行1列
// 创建右面窗格中的视图
if(!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDialogA),CSize(200,1000), pContext))
return FALSE;
// 创建左上面窗格中的视图
if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CyyyView),CSize(800, 800), pContext))
return FALSE;
// 创建左下面窗格中的视图
if(!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(cDialogData),CSize(800, 200), pContext))
return FALSE;
/* if(!m_wndSplitter.CreateView(1, 1, RUNTIME_CLASS(CDialogA),CSize(200, 800), pContext))
return FALSE;*/
CRect r;
GetClientRect(&r);
m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 0 );
//m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 1 );
m_wndSplitter.RecalcLayout();
m_wndSplitter2.SetRowInfo(0,r.Height()/2,0);
m_wndSplitter2.SetRowInfo(1,r.Height()/2,0);
m_wndSplitter2.RecalcLayout();
就分好了,但是为什么不加入
CRect r;
GetClientRect(&r);
m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 0 );
//m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 1 );
m_wndSplitter.RecalcLayout();
m_wndSplitter2.SetRowInfo(0,r.Height()/2,0);
m_wndSplitter2.SetRowInfo(1,r.Height()/2,0);
m_wndSplitter2.RecalcLayout();
如果想要设置每个窗口的大小随意变动,则要
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
//CRect rc;
获取框架窗口客户区的CRect 对象
//GetClientRect(&rc);
// 创建静态分割窗口,一行两列
if(!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
//窗口的再分割
if(m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,
m_wndSplitter.IdFromRowCol(0, 0))==NULL)
return FALSE; //将第0行0列再分开2行1列
if(m_wndSplitter3.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,
m_wndSplitter.IdFromRowCol(0, 1))==NULL)
return FALSE; //将第0行0列再分开2行1列
// 创建右下面窗格中的视图
if(!m_wndSplitter3.CreateView(1, 0, RUNTIME_CLASS(CDialogStatus),CSize(200,200), pContext))
return FALSE;
// 创建右上面窗格中的视图
if(!m_wndSplitter3.CreateView(0, 0, RUNTIME_CLASS(CyyyView),CSize(800, 800), pContext))
return FALSE;
// 创建左下面窗格中的视图
if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(cDialogData),CSize(800, 200), pContext))
return FALSE;
if(!m_wndSplitter2.CreateView(1,0, RUNTIME_CLASS(CDialogA),CSize(200, 800), pContext))
return FALSE;
//CRect r;
//GetClientRect(&r);
m_wndSplitter.SetColumnInfo(0,800, 100);
m_wndSplitter2.SetRowInfo(0, 400, 100);
m_wndSplitter3.SetRowInfo(0, 200, 100);
m_wndSplitter.RecalcLayout();
m_wndSplitter2.RecalcLayout();
m_wndSplitter3.RecalcLayout();
return TRUE;
}
运行出来就如第二张图所示了。