第3节  Frame-Splitter-Splitter模型

更新于 2026年10月10日 版权声明
第3节 Frame-Splitter-Splitter模型

除了主要采用各种类型视图的派生类作为分隔器的子窗口之外,框架类的派生类也可以作为分隔器的子窗口。利用这一点,就可以实现对分隔器内部子窗口再次分隔的效果。

创建一个工程名为“ss”的SDI程序,演示对主框架多层次分隔,类似于Outlook的界面效果。

1)修改预编译头文件StdAfx.h,统一添加视图类头文件“afxcview.h”,如图12-21所示。

图示

图12-21 修改预编译头文件

2)在类视图中添加以下派生类,见表12-3。

表12-3 新添加视图和框架类的派生类

图示

3)在App类的头文件ss.h中,定义各个视图和子框架的指针变量。

图示

4)修改4个派生类的构造函数,初始化以上指针变量。

图示

5)修改CMainFrame类的头文件,添加分隔器变量并去掉原有的ChildView变量。

图示

6)在CMainFrame类中,添加OnCreateClient虚函数并修改代码。

图示

7)修改CRightFrame类的头文件,添加一个分隔器变量。

图示

8)在CRightFram类中,增加OnCreateClient虚函数并修改代码。

图示

9)编译并运行,测试代码。这样就完成了一个多层分隔窗口,如图12-22所示。(https://www.daowen.com)

图示

图12-22 查看运行结果

10)在CLeftView类中,添加视图初始化虚函数并修改代码。

图示

图示

11)在CTopView类中,添加视图初始化虚函数并修改代码。

图示

12)在CTopView类中,添加LVN_ITEMCHANGED消息反射函数并修改代码。

图示

13)在CRightFrame类中,添加PreCreateWindow虚函数并修改代码。

图示

图示

14)编译并运行,测试代码,如图12-23所示。

继续开发下去,就能够开发出完整的类似于Outlook软件的界面。

图示

图12-23 查看运行结果

15)在使用分隔器窗口的项目开发中,不但要通过分隔器创建多个分隔视图,而且还要使各个视图和框架之间能够方便自如地相互访问。常见的视图和框架间访问方法如下。

①调用CSplitterWnd::GetPane函数,获取某行某列的分隔视图对象的地址。

②在主框架类(CMainFrame)中定义各个视图的指针变量,再通过AfxGetMainWnd函数获取。

③统一在应用程序类(App)中定义各个视图的指针变量,再通过AfxGetApp函数获取。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)