首页 理论教育Frame-Splitter-Splitter模型

Frame-Splitter-Splitter模型

【摘要】:表12-3 新添加视图和框架类的派生类3)在App类的头文件ss.h中,定义各个视图和子框架的指针变量。5)修改CMainFrame类的头文件,添加分隔器变量并去掉原有的ChildView变量。6)在CMainFrame类中,添加OnCreateClient虚函数并修改代码。图12-22 查看运行结果10)在CLeftView类中,添加视图初始化虚函数并修改代码。12)在CTopView类中,添加LVN_ITEMCHANGED消息反射函数并修改代码。①调用CSplitterWnd::GetPane函数,获取某行某列的分隔视图对象的地址。②在主框架类中定义各个视图的指针变量,再通过AfxGetMainWnd函数获取。

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

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

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

978-7-111-46378-8-Chapter12-44.jpg

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

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

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

978-7-111-46378-8-Chapter12-45.jpg

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

978-7-111-46378-8-Chapter12-46.jpg

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

978-7-111-46378-8-Chapter12-47.jpg

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

978-7-111-46378-8-Chapter12-48.jpg

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

978-7-111-46378-8-Chapter12-49.jpg

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

978-7-111-46378-8-Chapter12-50.jpg

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

978-7-111-46378-8-Chapter12-51.jpg

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

978-7-111-46378-8-Chapter12-52.jpg

图12-22 查看运行结果

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

978-7-111-46378-8-Chapter12-53.jpg

978-7-111-46378-8-Chapter12-54.jpg

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

978-7-111-46378-8-Chapter12-55.jpg

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

978-7-111-46378-8-Chapter12-56.jpg

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

978-7-111-46378-8-Chapter12-57.jpg

978-7-111-46378-8-Chapter12-58.jpg

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

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

978-7-111-46378-8-Chapter12-59.jpg

图12-23 查看运行结果

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

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

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

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