拆分窗口使用CSplitterWnd来实现,实现步奏如下
第一步:在父框架中创建一个CSplitterWnd成员变量
第二步:在资源中插入一个对话框,Style设置为Child(必须) ,Border设置为None
CSplitterWnd m_wndSplitter;
第三步:重载父框架的CFrameWnd::OnCreateClient成员函数,并在该函数中调用类CSplitterWnd的Create或CreateStatic成员函数,配合CreateView来创建视图
例:
CMainFrame头文件添加:
CSplitterWnd m_wndSplitter;
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
实现OnCreateClient函数:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
//return CFrameWndEx::OnCreateClient(lpcs, pContext);
//静态分割
if (!m_wndSplitter.CreateStatic(this,//切分窗口的父窗口指针
1,2))//切分为1行2列
{
return FALSE;
}
CRect rect;
GetClientRect(&rect);
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMyLeftFormView), CSize(rect.Width() / 4, rect.Height()), pContext) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CTestView), CSize(rect.Width() / 4 * 3, rect.Height()), pContext))
{
//CMyLeftFormView是刚才创建的Dialog窗口,该窗口包含的类基类是CFormView
//CTestView是创建工程时自动生成的View窗口,也可以使用创建的Dialog窗口
return FALSE;
}
return TRUE;
}
运行结果:(效果忽略其中的按钮控件)
CreateView()函数参数:
row:窗格的行标,从0开始
col: 窗格的列标,从0开始
pViewClass : 视图的执行期类CRuntimeClass指针,可以用宏RUNTIME_CLASS获得(如刚才创建的Dialog窗口)
sizeInit : 一个SIZE(或者CSize)类型的数据,指定窗格的初始大小
pContext : 一般是由父窗口传递过来,包含窗口的创建信息
返回值 : 创建成功,返回非零值(TRUE),否则返回0(FALSE)。