介绍
框架界面中的窗口可以分隔成为多个子窗口,这一功能是通过拆分窗口类(CSplitterWnd)实现的。拆分窗口类可以被看成是一个分割器,其覆盖整个框架父窗口的客户区。
实例
a)创建一个磁盘文件查看器
1.建立一个单文档项目,取消文档/视图结构支持选项;
2.添加两个类:
class CLeftView:public CTreeView
class CRightView:public CListView
3.在主框架类CMainFrame的头文件中,添加成员变量并去掉原有的CChildView类变量:
CSplitterWnd m_split; //分割器
public:
CLeftView *m_pLeftView;
CRightView *m_pRightView;
在CMainFrame的OnSetFocus、OnCmdMsg、OnCreate函数中替换掉(或者注释掉)CChildView对象的相应代码。
4.添加虚函数OnCreateClient:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (!m_split.CreateStatic(this,1,2))//创建1行2列的分割器
{
return FALSE;
}
m_split.CreateView(0,0,RUNTIME_CLASS(CLeftView),
CSize(150,0),NULL);//创建0行0列处的子窗口
m_split.CreateView(0,1,RUNTIME_CLASS(CRightView),
CSize(0,0),NULL);//创建0行1列处的子窗口
//获得两个子窗口的指针
m_pLeftView=(CLeftView*)m_split.GetPane(0,0);
m_pRightView=(CRightView*)m_split.GetPane(0,1);
return TRUE;
}
5.在CLeftView和CRightView类中,添加需要的变量,初始化函数OnInitialUpdate和其他消息映射函数。
(这里就相当于向两个子窗口里填充内容。)
6.实现效果:
b.创建PP邮箱界面
框架类的派生类也可以作为分割器的子窗口。
1.添加以下派生类:
class CLeftView:public CTreeView
class CRightView:public CRightFrame
class CTopView:public CListView
class CBottomView:public CHtmlView
2.修改CMainFrame类的头文件,按之前的方法去掉CChildView的相关代码,添加:
CSplitterWnd m_split;
在OnCreate Client函数中:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (!m_split.CreateStatic(this,1,2))//创建1行2列的分割器
{
return FALSE;
}
m_split.CreateView(0,0,RUNTIME_CLASS(CLeftView),
CSize(150,0),NULL);//创建0行0列处的子窗口
m_split.CreateView(0,1,RUNTIME_CLASS(CRightFrame),
CSize(0,0),NULL);//创建0行1列处的子窗口
return TRUE;
}
3.在子框架类CRightFrame中,添加分割器变量,并修改OnCreateClient虚函数,同上。
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (!m_split.CreateStatic(this,2,1))//创建2行1列的分割器
{
return FALSE;
}
m_split.CreateView(0,0,RUNTIME_CLASS(CLeftView),
CSize(0,210),NULL);//创建0行0列处的子窗口
m_split.CreateView(1,0,RUNTIME_CLASS(CRightFrame),
CSize(0,0),NULL);//创建1行0列处的子窗口
return TRUE;
}
4.在App类的头文件中添加四个类的变量指针并初始化,用于数据的交换;修改四个类的初始化函数和其他响应函数,已实现界面的显示和其他功能的设定。
5.效果显示: