1、在主框架中声明两个CSplitterWnd对象
public:
CSplitterWnd m_wndSplitter1;
CSplitterWnd m_wndSplitter2;
2、重载CMainFrame::OnCreateClient,左一右二方式切分
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
//分成1行2列
m_wndSplitter1.CreateStatic(this,1,2);
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CMyView1),CSize(100,100),pContext);
//对第0行第1列进行操作,将其分成2行1列
m_wndSplitter2.CreateStatic(&m_wndSplitter1,
2,1,
WS_CHILD|WS_VISIBLE,
m_wndSplitter1.IdFromRowCol(0,1));
//IdFromRowCol()获取右半窗格的子窗口ID
//以选中的那个部分为基准,创建第0行第0列
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CMyView2),CSize(100,100),pContext);
//以选中的那个部分为基准,创建第1行第0列
m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CMyView3),CSize(100,100),pContext);
return TRUE;
}
3、重载CMainFrame::OnCmdMsg否则命令消息无法达到新的两个视图
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: Add your specialized code here and/or call the base class
CDocument* pDoc=GetActiveDocument();
POSITION pos=pDoc->GetFirstViewPosition();
pDoc->GetNextView(pos);
CView* pView2=pDoc->GetNextView(pos);
CView* pView3=pDoc->GetNextView(pos);
//视图3先处理
if(pView3->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))
return TRUE;
//视图2接着处理
if(pView2->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))
return TRUE;
//实在没有框架接着处理
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}