静态分割窗口+关联对话框

来源:互联网 发布:战役和战争的区别 知乎 编辑:程序博客网 时间:2024/05/25 19:56

 静态分割窗口

       创建静态分割窗口的步骤为:

       1. 在父框架类中定义一个CSplitterWnd类型的成员对象。

       2. 重载父框架类的CFrameWnd::OnCreateClient成员函数。

       3. 在重载的CFrameWnd::OnCreateClient函数中调用CSplitterWnd成员对象的CreateStatic成员函数,然后可以调用CSplitterWnd成员对象的CreateView成员函数为每个窗格创建视图。 

       实例:在主框架窗口中的客户区创建一个两行一列的静态分割窗口:(首先创建一个名为“Example34”的MFC单文档工程)

       1. 在MainFrm.h文件中为CMainFrame类添加成员对象:CSplitterWnd m_wndSplitter;。

       2. 在Class View类视图中找到CMainFrame类,右键点击,在右键菜单中选择Properties,就会显示属性页,然后在属性页的工具栏上点击Tip为Overrides的按钮,下面的列表中就列出了能够重载的函数,找到OnCreateClient生成重载函数。

       3. 在MainFrm.cpp文件中找到刚重载的OnCreateClient函数进行修改。因为鸡啄米没有新建其他视图类,所以上下两个窗格的视图都是CExample34View。为了能识别CExample34View类,还需在MainFrm.cpp文件中添加#include "Example34View.h",在Example34View.h文件中添加#include "Example34Doc.h"。最终OnCreateClient函数修改如下:

C++代码
  1. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)   
  2. {   
  3.     // TODO: Add your specialized code here and/or call the base class   
  4.     CRect rc;   
  5.   
  6.     // 获取框架窗口客户区的CRect对象   
  7.     GetClientRect(&rc);   
  8.   
  9.     // 创建静态分割窗口,两行一列   
  10.     if (!m_wndSplitter.CreateStatic(this, 2, 1))   
  11.         return FALSE;   
  12.   
  13.     // 创建上面窗格中的视图   
  14.     if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CExample34View), CSize(rc.Width(), rc.Height()/2), pContext))   
  15.         return FALSE;   
  16.   
  17.     // 创建下面窗格中的视图   
  18.     if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CExample34View), CSize(rc.Width(), rc.Height()/2), pContext))   
  19.         return FALSE;   
  20.   
  21.     return TRUE;   
  22.   
  23.     //return CFrameWndEx::OnCreateClient(lpcs, pContext);   
  24. }  

       4. 运行程序,在结果界面中关掉其他面板后效果如下:

 静态分割窗口

       如果大家想创建在其中某个窗格中再嵌套分割窗口,那么就需要再定义一个CSplitterWnd对象,以父窗格所在的CSplitterWnd对象为父框架窗口创建分割窗口即可。

如何将子窗口和对话框关联起来?

Class View,右击工程名,Class Wizard,Add Class下拉菜单选择MFC Class...,填写类名CInfoView并选择基类为CFormView,此时会自动生成InfoView.h和InfoView.cpp并自动生成了一个对话框,在MainFrm.cpp文件中包含头文件InfoView.h

最后,将上面代码修改为:

  1.   if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CInfoView), CSize(rc.Width(), rc.Height()/2), pContext))   
  2.         return FALSE;   

如此一来,上面的子窗口就和对话框关联起来了,也就是说,上面的子窗口显示的是该对话框。


2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两周的宝宝便秘怎么办 3岁宝宝不肯吃药怎么办 1岁婴儿不肯吃药怎么办 9月婴儿不肯吃药怎么办 半岁宝宝不吃药怎么办 1岁宝宝不爱吃药怎么办 2岁吃多了呕吐怎么办啊 小孩吃撑了吐怎么办 三岁宝宝吃太多怎么办 小孩吃撑发烧了怎么办 婆婆不帮忙带孩子怎么办 孩子在中班幼儿园不爱写字怎么办 小孩不愿意上学不愿意写字怎么办 宝妈太内向不喜欢带孩子出门怎么办 宝宝吃饭不带围兜怎么办 宝宝吃饭不喜欢带围兜怎么办 宝宝吃饭不爱带围兜怎么办 孩子不吃肉和菜怎么办 我很恶心我婆婆怎么办 坐月子不喜欢婆婆抱宝宝怎么办 宝宝一写字就哭怎么办 4岁宝宝不爱学习怎么办 4岁宝宝不爱写字怎么办 孩子调皮老师不让上学了怎么办 小学生写字握笔握出剪子来怎么办 儿子6岁不会写字怎么办 宝宝在幼儿园不说话怎么办 孩子上幼儿园不说话怎么办 幼儿写数字不写怎么办 小孩不吃饭怎么办 十个月 十个月小孩不爱吃饭怎么办 十个月的小孩不吃饭怎么办 家长要调幼儿园监控怎么办 自己带孩子婆婆生气怎么办 婆婆老是觉得我奶水不够怎么办 1岁小儿特别懒怎么办 17的孩子很懒怎么办 上大班的孩子不愿写字怎么办 快上中班的小朋友不爱学习怎么办 小学生两边肩膀不平应该怎么办 写字右肩膀疼是怎么办