关闭

视图的三叉切分

标签: class框架
1016人阅读 评论(0) 收藏 举报
分类:

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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59548次
    • 积分:953
    • 等级:
    • 排名:千里之外
    • 原创:33篇
    • 转载:7篇
    • 译文:0篇
    • 评论:9条
    文章分类
    最新评论