MFC基于单文档分割窗口

来源:互联网 发布:网络服务器租用业务员 编辑:程序博客网 时间:2024/05/21 17:06

创建一个MFC单文档应用程序命名为test

打开资源管理器Dialog,右击鼠标,插入两个对话框选择基于CFormView类

属性style改为child,broad改为none

在对话框中插入类,分别命名为cDialogData,cDialogA.

打开类视图,右击CMainFrm类,选择属性,重写OnCreateClient函数。

在MainFrm.h中加入CSplitterWnd m_wndSplitter;
    CSplitterWnd m_wndSplitter2;的定义

在MainFrm.cpp中加入头文件DialogData.h和DialogA.h

在OnCreateClient函数中添加以下代码

// 创建静态分割窗口,一行两列if(!m_wndSplitter.CreateStatic(this, 1, 2))return FALSE;  //再把左边窗口分为两行一列  if(m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,       m_wndSplitter.IdFromRowCol(0, 0))==NULL)       return FALSE; //将第0行0列再分开2行1列 // 创建右面窗格中的视图if(!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDialogA),CSize(200,1000), pContext))return FALSE;  // 创建左上面窗格中的视图  if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CyyyView),CSize(800, 800), pContext))   return FALSE;   // 创建左下面窗格中的视图  if(!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(cDialogData),CSize(800, 200), pContext))  return FALSE;  /* if(!m_wndSplitter.CreateView(1, 1, RUNTIME_CLASS(CDialogA),CSize(200, 800), pContext))  return FALSE;*/
  CRect r;  GetClientRect(&r);  m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 0 );  //m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 1 );  m_wndSplitter.RecalcLayout();  m_wndSplitter2.SetRowInfo(0,r.Height()/2,0);  m_wndSplitter2.SetRowInfo(1,r.Height()/2,0);  m_wndSplitter2.RecalcLayout();

就分好了,但是为什么不加入

  CRect r;  GetClientRect(&r);  m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 0 );  //m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 1 );  m_wndSplitter.RecalcLayout();  m_wndSplitter2.SetRowInfo(0,r.Height()/2,0);  m_wndSplitter2.SetRowInfo(1,r.Height()/2,0);  m_wndSplitter2.RecalcLayout();

这些设置窗口大小的函数时总是报错,而且运行不出来view区域。

这样运行出来的效果如图所示。

如果想要设置每个窗口的大小随意变动,则要

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext){// TODO: 在此添加专用代码和/或调用基类//CRect rc;//// 获取框架窗口客户区的CRect 对象//GetClientRect(&rc);// 创建静态分割窗口,一行两列if(!m_wndSplitter.CreateStatic(this, 1, 2))return FALSE;//窗口的再分割 if(m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,      m_wndSplitter.IdFromRowCol(0, 0))==NULL)      return FALSE; //将第0行0列再分开2行1列  if(m_wndSplitter3.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,  m_wndSplitter.IdFromRowCol(0, 1))==NULL)  return FALSE; //将第0行0列再分开2行1列 // 创建右下面窗格中的视图if(!m_wndSplitter3.CreateView(1, 0, RUNTIME_CLASS(CDialogStatus),CSize(200,200), pContext))return FALSE;  // 创建右上面窗格中的视图  if(!m_wndSplitter3.CreateView(0, 0, RUNTIME_CLASS(CyyyView),CSize(800, 800), pContext))   return FALSE;   // 创建左下面窗格中的视图  if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(cDialogData),CSize(800, 200), pContext))  return FALSE;  if(!m_wndSplitter2.CreateView(1,0, RUNTIME_CLASS(CDialogA),CSize(200, 800), pContext))  return FALSE;  //CRect r;  //GetClientRect(&r);  m_wndSplitter.SetColumnInfo(0,800, 100);  m_wndSplitter2.SetRowInfo(0, 400, 100);  m_wndSplitter3.SetRowInfo(0, 200, 100);  m_wndSplitter.RecalcLayout();  m_wndSplitter2.RecalcLayout();  m_wndSplitter3.RecalcLayout();return TRUE;}
运行出来就如第二张图所示了。


设置的思路图在最后一张图上。

原创粉丝点击