视图的三叉切分

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值