首页 理论教育Frame-Splitter模型实现详解

Frame-Splitter模型实现详解

【摘要】:拆分窗口类,可以将框架窗口分隔为上下或左右多个子窗口。1)在程序向导第1个步骤中,去掉“Document/View architecture support”选项,如图12-16所示。8)在主框架类CMainFrame类的头文件中,添加一些成员变量并去掉原有的CChildView类变量。9)在CMainFrame类的源文件中,去除m_wndView相关的代码。10)在CMainFrame类中,添加OnCreateClient虚函数并修改函数代码。图12-19 查看运行结果12)在CLeftView类中添加OnInitialUpdate虚函数,并修改代码初始化树形视图。①在框架类的虚函数OnCreateClient回调时,调用CSplitterWnd::CreateStatic创建多行多列的分隔器。

拆分窗口类(CSplitterWnd类),可以将框架窗口分隔为上下或左右多个子窗口。分隔器窗口在空间位置上并不是只有一个“分隔条”那么大,而是覆盖整个框架父窗口的客户区。

创建一个工程名为“sp”的SDI程序,使用分隔器窗口将主框架的客户区分为左右两个部分。

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

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

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

2)工程创建完成后,添加CTreeView类的派生类CLeftView作为分隔器左侧视图,如图12-17所示。

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

图12-17 添加树视图类的派生类

3)再添加CListView类的派生类CRightView作为分隔器右侧视图,如图12-18所示。

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

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

4)在CLeftView类的头文件中包含基类的头文件,并添加控件类的引用型变量

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

5)在CLeftView类的源文件中,修改构造函数初始化控件引用变量。

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

6)在CRightView的头文件中包含基类的头文件,并添加控件类的引用型变量。

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

7)在CRightView类的源文件中,修改构造函数初始化控件应用变量。

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

8)在主框架类CMainFrame类的头文件中,添加一些成员变量并去掉原有的CChildView类变量。

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

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

9)在CMainFrame类的源文件中,去除m_wndView相关的代码。(www.chuimin.cn)

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

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

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

11)编译并运行,测试代码,这样就完成了一个简单的分隔窗口,如图12-19所示。

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

图12-19 查看运行结果

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

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

13)在CRightView类中添加OnInitialUpdate虚函数,并修改代码初始化列表视图。

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

14)在CRightView类中添加一个公用的成员函数,用于在列表中刷新指定目录下的文件。

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

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

15)在CLeftView类中,添加TVN_SELCHANGED消息映射函数并修改代码。

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

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

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

图12-20 查看运行结果

17)在框架类内创建分隔窗口只需要两个步骤。

①在框架类的虚函数OnCreateClient回调时,调用CSplitterWnd::CreateStatic创建多行多列的分隔器。

②调用CSplitterWnd::CreateView函数,在分隔器的每个窗格内都要创建一个对应的子窗口。