要用好它,还是需要一些技巧的。经过网上搜索资料,以及我自己的摸索,把
一些要点记录在这里。
Tab Control 的运行效果有点像 Property Sheet,但两者还是有一些区别。
我的理解就是 Property Sheet 主要用在对话框中,对数据进行进行分类管理。
而 Tab Control 使用范围更广一些,既可以用在对话框,也可以用在视图中,
除了可以管理配置数据外,还可以对软件的组织进行规划,比如可以通过它来
切换不同的视图等等。
当然这不是没有代价的,Tab Control 的编程就比 Property Sheet 的复杂
很多。
我最初有点搞不懂,如何在 Tab Control 中使用不同的 Page,就象
Property Page 一样,Tab Control 并没有提供便利的机制让你轻松做到这一
点。还好,VC 是最棒的,通过变通的方法还是可以做到这一点。
假如我现在有个 SDI 程序,View 是 Form View,想在上面放个 Tab
Control,包含两个 Page。现在让我们来看看应该怎样处理。
首先当然要增加一个 Tab Control 资源,然后利用 Class Wizard,在
View 中增加一个 Control 变量。
接着建立两个对话框资源,别忘了把 Style 改为 Child,Border 改为
None。然后就可以在上面加其他控件了。
接着利用 Class Wizard,分别为这两个对话框建立两个类,比如 CPage1
和 CPage2。
然后在 View 类头文件中,加入这两个对话框对象。同时增加一个变量 int
m_CurSelTab,用了表明是哪个 Page 即将被切换。
为了避免用户在切换 Tab 时,程序对 Tab Index 的枚举,可以利用数组来
做这个事情。
在 View 的初始化函数中需要把 CPage1、CPage2 和 Tab Control 关联起
来,并保存页面地址,设置初始页面,等等。
void CTab_testView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//为 Tab Control 增加两个页面
m_tab.InsertItem(0, _T(\"First\"));
m_tab.InsertItem(1, _T(\"Second\"));