拆分窗口类,提供分离窗口的功能,使一个窗口包含多个方格。窗格一般是由CView派生出来的对象,但它也可以是具有适当子窗口ID的任何CWnd对象。
创建步骤:
1.在父框架CMainFrame中创建一个CSplitterWnd成员变量
2.重载父框架窗口的OnCreateClient/或主View类中的OnCreate函数
3.在函数中调用Create(动态创建)或CreateStatic(静态创建)成员函数
/*
BOOL Create(CWnd* pParentWnd,int nMaxRows,int nMaxCols,SIZE sizeMin,CCreateContext* pContext,DWORD dwStyle,UINT nID);
功能描述:该函数用来创建动态切分窗口。
参数含义:pParentWnd 切分窗口的父框架窗口。
nMaxRows,nMaxCols是创建的最大的列数和行数。
sizeMin是窗格的现实大小。
pContext 大多数情况下传给父窗口。
nID是字窗口的ID号.
BOOL CreateStatic(CWnd* pParentWnd,int nRows,int nCols,DWORD dwStyle,UINT nID)
功能描述:用来创建切分窗口。 参数含义同上。
BOOL CreateView (int row,int col,CruntimeClass* pViewClass,SIZE sizeinit,CcreateContext* pContext);
功能描述:为静态切分的窗口的网格填充视图。在将视图于切分窗口联系在一起的时候必 须先将切分窗口创建好。
参数含义:同上。
*/
int CMyTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
CCreateContext* pContext = (CCreateContext*)lpCreateStruct->lpCreateParams;
m_wndSplitter.CreateStatic(this,2,1);//创建一个静态分栏窗口,分为二行一列
CRect rect;
GetClientRect(&rect);
//CTabView窗格占窗体的上面4/5
m_wndSplitter.CreateView(0,0,// 窗格的行、列序数
RUNTIME_CLASS(CTabViewEx),//视图类,继承自CTabView
CSize(rect.Width(),rect.Height()*4/5),//初始化大小
pContext);//父窗口的创建参数
//CEditViewLog窗格占窗体的最后1/5
m_wndSplitter.CreateView(1,0,
RUNTIME_CLASS(CEditViewEx),//编辑窗口类,继承自CEditView
CSize(rect.Width(),rect.Height()/5),
pContext);
return 0;
}
然后在OnSize中利用对应的成员函数调整分隔栏位置
void CMyTestView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
CRect rect;
GetClientRect(&rect);
int x = rect.Width();
int y = rect.Height();
m_wndSplitter.MoveWindow(0,0,x,y);
//m_wndSplitter.SetColumnInfo(0, x/4,0);
m_wndSplitter.SetRowInfo(0, y-y/4,0); //设置窗口0对应的行信息
m_wndSplitter.SetRowInfo(1, y/4, 0); //设置窗口1对应的行信息
m_wndSplitter.RecalcLayout(); //在调整行或列尺寸后调用此函数来重新显示该分隔器窗口
}