首页 理论教育MFC视频教程:Frame-View模型简介

MFC视频教程:Frame-View模型简介

【摘要】:1)在程序向导第1个步骤中,去掉“Document/View architecture support”选项,如图12-4所示。5)在主框架类CMainFrame的头文件中,使用CMainView替换原有的CChildView。6)在CMainFrame::OnCreate函数中,去除CChildView的创建代码。7)在其他两个框架类的成员函数中,使用m_pMainView替换m_wndView。8)在类视图中的CMainFrame类上添加OnCreateClient虚函数,如图12-7所示。②OnCreateClient是CFrameWnd类的虚函数,在基类函数CFrameWnd::OnCreate执行的过程中回调OnCreateClient函数,主要用于创建视图类等客户区子窗口。③OnInitialUpdate是CView类虚函数,专用于视图初始化,类似于对话框类的OnInitDialog函数。

创建一个工程名为“sd”的单文档界面程序(SDI),用于演示手动创建框架和视图的过程。

1)在程序向导第1个步骤中,去掉“Document/View architecture support”选项,如图12-4所示。

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

图12-4 创建框架视图程序

2)一直单击“下一步”按钮,直到第5步选“As a statically linked library”,如图12-5所示。

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

图12-5 MFC应用程序向导

3)完成工程创建后,在类视图中添加CListView派生类,如图12-6所示。

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

图12-6 添加列表视图类的派生类

4)在头文件中包含基类的头文件。

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

5)在主框架类CMainFrame的头文件中,使用CMainView替换原有的CChildView。

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

6)在CMainFrame::OnCreate函数中,去除CChildView的创建代码。

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

7)在其他两个框架类的成员函数中,使用m_pMainView替换m_wndView。

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

8)在类视图中的CMainFrame类上添加OnCreateClient虚函数,如图12-7所示。

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

图12-7 为CMainView类添加虚函数

9)修改OnCreateClient虚函数代码,在主框架的客户区创建列表视图。

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

10)在类视图中的CMainView类上添加OnInitialUpdate虚函数,如图12-8所示。

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

图12-8 为CMainView类添加虚函数

11)修改OnInitialUpdate函数代码初始化列表视图。

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

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

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

图12-9 查看运行结果

一个简单的SDI架构效果比对话框程序的界面要宽大一些,而且还有菜单和工具栏等辅助界面。

13)在资源视图中插入一个对话框资源,用于向列表视图中添加数据,如图12-10所示。(www.chuimin.cn)

14)修改对话框ID为IDD_INPUT_DLG,修改外观和字体并插入一些控件,见表12-1。

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

图12-10 编辑录入对话框资源

表12-1 录入对话框的控件属性

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

15)创建与IDD_INPUT_DLG关联的CDialog派生类,并建立数据型关联变量,如图12-11所示。

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

图12-11 添加数据型关联变量

16)在资源视图中修改IDR_MAINFRAME主菜单,如图12-12所示。

17)在“编辑”菜单下面,添加三个子菜单项,见表12-2。

18)在刚添加的菜单项上打开类向导,如图12-13所示。

19)在类向导中为刚添加的菜单项建立消息映射函数,如图12-14所示。

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

图12-12 编辑主菜单资源

表12-2 主菜单的菜单项属性

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

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

图12-13 打开类向导

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

图12-14 添加菜单项的消息映射函数(注意,类名选择CMainView)

20)修改以上建立的消息映射函数的代码。

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

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

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

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

图12-15 查看运行结果

22)框架类和视图类重要回调函数包括消息回调和虚函数回调。

①OnCreate是WM_CREATE的消息映射函数,主要用于框架类的界面初始化。例如,创建工具栏、状态栏以及视图等子窗口界面。

②OnCreateClient是CFrameWnd类的虚函数,在基类函数CFrameWnd::OnCreate执行的过程中回调OnCreateClient函数,主要用于创建视图类等客户区子窗口。

③OnInitialUpdate是CView类虚函数,专用于视图初始化,类似于对话框类的OnInitDialog函数。

④PreCreateWindow是CWnd类虚函数,用于在窗口创建之前设定新窗口的属性的预处理。