Leizi专栏

               喜欢雨天,静静地聆听雨滴的声音

视图的三叉切分

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);
}

阅读更多
文章标签: class 框架
个人分类: VC/MFC
上一篇祝小东西生日快乐!
下一篇好好学习
想对作者说点什么? 我来说一句

单文档切分视图源码(VC)

2010年04月15日 41KB 下载

动态变换三切分窗口

2007年11月21日 59KB 下载

没有更多推荐了,返回首页

关闭
关闭