MFC可以使用TabCtrl空间实现类似于选项卡功能的实现。
实现方法大概有这几步组成:
1、工程与主对话框创建
新建一个基于对话框的MFC应用程序,添加一个TabCtrl控件,并绑定CTabCtrl控件类型的变量(在VC 6.0中通过类向导来添加,Ctrl+W快捷键可直接调出),变量名定为m_tabCtrl(可以自由指定)。
2、tab标签对话框创建
每个tab标签都可以显示一个对话框,因此我们需要先设计对话框,这个和主对话框的设计类似的,只是在属性设置中需要指定Style=Child,Border=None。至于对话框资源的添加,在ResourceView中的Dialog上右击,选择“Insert Dialog”即可,按照同样方法添加三个Dialog,可以用默认的名字,也可以自己重新起名字。
接下来就是为这三个对话框资源添加对话框类,添加也很简单,在对话框资源上双击即可,去默认的名字就行。好了,现在我们有了三个新的对话框资源以及三个对话框类,列举IDD和类名如下(这些是默认的值,如果你在上面步骤中自己重命名了,那以重命名的为准,这些信息下面会用到):
class IDD
CDialog1 IDD_DIALOG1
CDialog2 IDD_DIALOG2
CDialog3 IDD_DIALOG3
3、在主对话框中添加tab标签对话框对象
tab标签对话框可以算作是主对话框的一部分,因此我们在主对话框中分别增加三个tab对话框类型的变量,如下(变量名可根据个人喜号自由指定):
CDialog1 m_Dlg1;
CDialog2 m_Dlg2;
CDialog3 m_Dlg3;
记得要包含相应的tab对话框的头文件。
4、初始化
这一步的工作就是将各个tab对话框与TabCtrl控件的每一个标签项对于起来,这些工作在主对话框的OnInitDialog()中完成,具体的代码如下:
m_tabCtrl.InsertItem(0,_T(“活期储蓄”));
m_tabCtrl.InsertItem(1,_T(“整存整取”));
m_tabCtrl.InsertItem(2,_T(“通知存款”));m_Dlg1.Create(IDD_DIALOG1,&m_tabCtrl);
m_Dlg2.Create(IDD_DIALOG2,&m_tabCtrl);
m_Dlg3.Create(IDD_DIALOG3,&m_tabCtrl);CRect rc;
m_tabCtrl.GetClientRect(&rc);
rc.top += 20;
rc.bottom -= 4;
rc.left += 4;
rc.right -= 4;m_Dlg1.MoveWindow(&rc);
m_Dlg2.MoveWindow(&rc);
m_Dlg3.MoveWindow(&rc);m_Dlg1.ShowWindow(SW_SHOW);
m_tabCtrl.SetCurFocus(0);
通过InsertItem添加三个标签项,接下来创建三个tab对话框并与TabCtrl绑定,后面rc和MoveWindow的操作时调整对话框的位置的操作,否则你会发现程序运行后看不到选项卡了(原因是默认的tab对话框的大小为主对话框显示区域的大小,因此把tab标签覆盖掉了,所以要先获取主对话框的大小,然后做下调整)。最后两行代码是设置显示第一个标签项。
5、标签(或选项卡)切换
在主对话框中处理TabCtrl控件的TCN_SELCHANGE消息即可,添加消息处理函数的地方还是通过类向导来完成。这个函数中的主要操作就是设置各个选项卡谁显示、谁不显示而已,代码页比较简单,只是如果标签太大的话,代码可能会比较多,本示例中的代码如下:
void CTabCtrlTestDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
CRect rc;
m_tabCtrl.GetClientRect(&rc);switch(m_tabCtrl.GetCurSel())
{
case 0:
m_Dlg1.ShowWindow(SW_SHOW);
m_Dlg2.ShowWindow(SW_HIDE);
m_Dlg3.ShowWindow(SW_HIDE);
m_Dlg1.SetFocus();
break;
case 1:
m_Dlg2.ShowWindow(SW_SHOW);
m_Dlg1.ShowWindow(SW_HIDE);
m_Dlg3.ShowWindow(SW_HIDE);
m_Dlg2.SetFocus();
break;
case 2:
m_Dlg3.ShowWindow(SW_SHOW);
m_Dlg2.ShowWindow(SW_HIDE);
m_Dlg1.ShowWindow(SW_HIDE);
m_Dlg3.SetFocus();
break;
default:
break;
}*pResult = 0;
}
至此,我们的选项卡式对话框就出来了!