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

 

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


我们需要使用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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MFC 中,对话框(Dialog)和视图(View)都是窗口(Window)对象,但它们的作用和用法不同。对话框用于显示窗口中的用户界面元素,如按钮、文本框等,而视图则用于显示和操作应用程序所处理的数据。通常情况下,对话框视图都需要与文档(Document)类关联,以便在用户界面和数据之间建立联系。 要将对话框视图关联起来,可以在对话框类中添加一个成员变量,类型为视图类的指针,用于存储指向该视图对象的指针。在对话框类的 OnInitDialog 函数中,可以通过 GetDlgItem 函数获取视图控件的句柄,并通过该句柄创建视图对象,并将该对象的指针存储到对话框类的成员变量中。 例如,假设有一个名为 CMyDialog 的对话框类,和一个名为 CMyView 的视图类,可以在 CMyDialog 类中添加如下成员变量: ``` class CMyDialog : public CDialog { public: CMyView* m_pView; }; ``` 然后在 OnInitDialog 函数中,可以添加如下代码: ``` BOOL CMyDialog::OnInitDialog() { // ... // 获取视图控件的句柄 CWnd* pWnd = GetDlgItem(IDC_VIEW); // 创建视图对象并将其指针存储到成员变量中 m_pView = new CMyView(); m_pView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, IDC_VIEW, NULL); m_pView->SetWindowPos(pWnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // ... return TRUE; } ``` 其中 IDC_VIEW 是视图控件的 ID,可以在对话框资源中设置。这样就可以在对话框显示视图,并且可以通过对话框类的成员变量访问该视图对象。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值