窗口切分

      这几天用到了窗口的切分,开始时很迷惑,也找了很多资料,但始终没有找到很理想的代码。几天过去了,思路也渐渐清晰了些。下面把我对窗口切分的理解跟大家分享一下,还请各位多多指正。。

 

1. 动态切分窗体

1). 首先利用AppWizard创建工程项目时在第4部中选中"Advanced Options"对话框中的"Use splut window"选项

2).

//in file: MainFrame.h   class:CMainFrame

protected:

CSplitterWnd m_wndSplitter;

3).

MFC机制重写了OnCreateClient()函数,代码如下:

//in file: MainFrame.cpp

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*LPCS*/,

CCreateContext* pContext)

{

        return m_wndSplitter.Create(this,

        2,2,                                //TODO:adjust the number of rows,columns

        CSize(10,10),                //TODO:adjust the minimum pane size

        pContext);

}

 

2.静态切分窗体

1).

//in file: MainFrame.h   class:CMainFrame

protected:

CSplitterWnd m_wndSplitter;

2).

//in file: MainFrame.cpp

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
     //创建一个静态切分窗口,分为1行2列
     CRect rect;
     GetClientRect(rect);
     if(m_wndSplitter.CreateStatic(this,1,2)==NULL)     //将当前视图分隔为1行2列
          return FALSE;
     //第一个视图的创建

     m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CFrame_OpenGLView),CSize(300,0)),pContext);
     //第二个视图的创建 
     m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyView),CSize(0,0),pContext);
     

     return TRUE; 
}

注:其中CreateView()的第四个参数为 子窗口显示的最小尺寸

 

3.窗体的静态嵌套切分

1).

//in file: MainFrame.h   class:CMainFrame

protected:

CSplitterWnd m_wndSplitter1;

CSplitterWnd m_wndSplitter2;

2).

//in file: MainFrame.cpp

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
     //创建一个静态切分窗口,分为1行2列
     CRect rect;
     GetClientRect(rect);
     if(m_wndSplitter1.CreateStatic(this,1,2)==NULL)     //将当前视图分隔为1行2列
          return FALSE;

     //第一个视图的创建 
     m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CFrame_OpenGLView),CSize(rect.Width()*1/4,rect.Height()),pContext);
 
     //创建第二个切分窗口,以2行1列的方式嵌入到第一个切分窗口的第一行第二列(0,1)视图中

     if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,WS_CHILD | WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,1))==NULL)
          return FALSE;

     //第二个视图的创建
     m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CMyView),CSize(rect.Width()*3/4,rect.Height()*3/4),pContext);
     //第三个视图的创建

     m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CTextView),CSize(rect.Width()*3/4,rect.Height()*1/4),pContext);

     

     //设定初始化后当前激活状态的视图为第一个1行1列的(0,1)

     SetActiveView((CFrame_OpenGLView*) m_wndSplitter1.GetPane(0,1));

 

     return TRUE; 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值