第4节 MDIFrameWnd-MDIChildWnd结构
单文档界面(SDI)由一个主框架和一个视图组成,是一对一的关系,主框架和视图共用一个主菜单资源。多文档界面(MDI)由主框架和子框架两层框架组成,主框架和子框架各自使用不同的菜单资源。一个主框架内部含有多个子框架,是一对多的关系,每个子框架内含有一个视图,是一对一的关系。
创建一个工程名为“ie”的MDI程序,本节演示多文档界面开发。
1)在程序向导第1步中,去掉“Document/View architecture support”选项,如图12-24所示。

图12-24 创建框架视图程序
2)工程创建完成后,在类视图中添加CHtmlView的派生类,如图12-25所示。

图12-25 添加HTML视图类的派生类
3)在子框架类CChildFrame的头文件中,使用CMainView替换原有的CChildView对象。

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

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


6)在类视图中的CChildFrame类名上,添加OnCreateClient虚函数。

7)在App类中修改ID_FILE_NEW菜单项消息映射函数OnFileNew代码。

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

图12-26 查看运行结果
每次执行“文件→新建”命令,主框架内部都产生一个新的子窗口,在视图上单击鼠标右键显示是一个空白网页。
9)在资源视图中添加一个对话框资源,修改ID为IDD_OPEN_DLG,如图12-27所示。

图12-27 编辑地址对话框资源
10)修改对话框字体和外观并添加一些控件,见表12-4。
表12-4 地址对话框的控件属性

11)通过类向导为IDD_OPEN_DLG建立CDialog派生类,类名是“COpenDlg”,如图12-28所示。
(https://www.daowen.com)
图12-28 创建地址对话框的关联类
12)在COpenDlg类中为组合控件添加数值型和控件型两个关联变量,如图12-29所示。

图12-29 添加关联变量
13)在COpenDlg类中,添加WM_INITDIALOG的消息映射函数并修改代码。

14)修改主框架菜单资源(IDR_MAINFRAME),添加一个“打开”的菜单项,如图12-30所示。
15)在子框架菜单(IDR_IETYPE)中,也添加相同ID和标题的菜单项,如图12-31所示。
16)在类向导中选中CIeApp类,添加ID_FILE_OPEN菜单项的消息映射函数,如图12-32所示。

图12-30 编辑主框架菜单资源

图12-31 编辑子框架菜单资源

图12-32 添加菜单项消息映射函数
17)修改函数代码。


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

图12-33 查看运行结果
19)在快捷键表中双击空白表格,添加菜单项ID_FILE_OPEN的快捷键,如图12-34所示。

图12-34 编辑快捷键资源
20)编译并运行,测试代码。
菜单项标题“打开(&O)\tCtrl+O”并非是快捷键设置而只是起显示作用,真正的快捷键只能在快捷键表中设置。
21)清理程序初始化函数代码并分析。

