可以通过创建嵌套的 分割器窗口 来解决这个问题 。不要担心,这不像听起来那么困难。因为那些分割器具有 许多可能的布局。下面的讨论假设 打算创建一个三线分割的窗口,一个垂直分割器把该窗口分成2列,右边的一列又被一个嵌套的水平分割器分割成2行。
第1步:使用ClassWizard创建一个新的CMDIChildWnd派生类,该类将负责分割器窗口。该类命名为CSplitFrame。
第2步:在第1步中创建的CSplitFrame类中增加两个CSplitterWnd类型的成员变量。
第3步:使用ClassWizard在CSplitFrame类中增加OnCreateClient()函数的一个重载。
第4步:不要忘记在合适的文档模板中引用CSplitFrame框架类,以获得所希望的行为。注意:因为明确的创建了各个面板内的视图,且通常传递给文档模板构造函数的视图类型变为非必须的。因此,可以把NULL传递给文档模板构造函数的最后一个变量。
附加注释:
也可以创建2行,下面的一行又可以分为2列,其不同在于CSplitFrame2::OnCreateClient()以不同的顺序创建分割器窗口:首先是水平分割器,其次再是垂直分割器。
可以详细的理解这两种技术,从而使用更多的分割器创建更复杂的布局,然而2线和3线分割器就能满足大部分应用程序了----值得注意的一个例外是Visual C++ Developer Studio中显示的可停靠窗口(但是那些已经不再是“真正”的分割器了)。