现在的位置: 首页 > 综合 > 正文

制作对话框与视图结合的分割窗口

2013年02月24日 ⁄ 综合 ⁄ 共 1694字 ⁄ 字号 评论关闭

 

有时候我们需要如下图的分割式窗体,一边是视图,一边是对话框,中间的分隔条还可拖动


我们需要使用CSplitterWnd类达到此目的。
教程原创:  王颂元   www.php18.com
1.新建一SDI工程
2.工程建立后,默认已经有了一个视图,我们现在需要增加左边的对话框到工程,
在资源窗口添加对话框,调整到适合大小后,按Ctrl+W,进入类向导,VC++会提示是否为这个新对话框添加类,选“确定”,进入添加类的界面。
3. 新类的类名输入LDLG,基类选CFormView, 注意,这里不能选CDialog,CFormView是专用于视图的对话框
4. 返回对话框,右键>属性,将样式设为“下层”
OK,至此左边对话框的工作已完,下面我们来把它放到视图中。使用CSplitterWnd的分割窗体功能
步骤如下:
1.MainFrm.h中添加一public 成员:
CSplitterWnd m_MySplitter;
2.加上头文件
#include "039View.h"    //这是视图的头文件
#include "LDLG.h"      //这是对话框类的头文件

3.在类向导为CMainFrame类添加OnCreateClient事件,代码如下:
m_MySplitter.CreateStatic(this,1,2);
m_MySplitter.CreateView(0,0,RUNTIME_CLASS(LDLG), CSize(250, 150), pContext);   //LDLG是对话框类
m_MySplitter.CreateView(0,1,RUNTIME_CLASS(CMy039View), CSize(250, 0), pContext); //CMy039View是视图类
SetActiveView((CMy039View*)m_MySplitter.GetPane(0,1)); //指定类视图
return true;

4.编译运行,此时会发觉有错误,我们还需要为视图类的.h文件添加一个头文件引用
#include "039Doc.h"        //039Doc.h是我的文档类头文件,你可以改成你工程相应的名称

再次编译,OK,成功了。

搞好了这个之后,同理我们可以搞个两边都是对话框的,或者两边都是视图的, 只是在分割时指定对应的类即可。

在上面第三步中,如果想分割成两行一列的话,就换下如下代码:
m_MySplitter.CreateStatic(this,2,1);
m_MySplitter.CreateView(0,0,RUNTIME_CLASS(LDLG), CSize(0,170), pContext);
m_MySplitter.CreateView(1,0,RUNTIME_CLASS(CMy039View), CSize(0, 0), pContext);
SetActiveView((CMy039View*)m_MySplitter.GetPane(0,0));

如果需要再复杂点,如下图所示,第二行分拆分成两列,

要达到这种效果就要使用两个Splitter对象了
m_MySplitter.CreateStatic(this,2,1);
m_MySplitter2.CreateStatic(&m_MySplitter,1,2,WS_CHILD|WS_VISIBLE,m_MySplitter.IdFromRowCol(1,0));

//上面的IdFromRowCol(1,0) 表示是拿m_MySplitter的第二行第一列来继续拆分

//分拆为拆开的各部份指定视图
m_MySplitter.CreateView(0,0,RUNTIME_CLASS(LDLG), CSize(0,170), pContext);
m_MySplitter2.CreateView(0,0,RUNTIME_CLASS(CMy039View), CSize(120,0), pContext);
m_MySplitter2.CreateView(0,1,RUNTIME_CLASS(CMy039View), CSize(0,0), pContext);

抱歉!评论已关闭.