用Tab Control实现一个多页面选项卡。
具体步骤如下:
1. 打开VS,用向导新建一个基于对话框的MFC应用程序。
2. 将默认的窗口上的两按钮和一个静态文本删掉(当然该步骤不是必须的,想留着也可以)。
3. 在窗口上拖一个Tab Control控件,大小位置自己定,右击开控件选择“添加变量”,添加一个control类型的变量m_tab。
4. 选择“视图资源”窗口,右击“Dialog”选择“插入Dialog”插入三个对话框,ID号分别为IDD_DIALOG1,IDD_DIALOG2,IDD_DIALOG3,修改对话框属性的Style为Child,Border属性为None,用ClassWizard为这三个对话框生成新的类,基类为Cdialog,类名分别为Cdlg1,Cdlg2,Cdlg3。
5. 在主对话框类的头文件中添加上面生成的三个类头文件Cdlg1.h,Cdlg2.h,Cdlg3.h 类定义中,然后在主对话框类中添加三个变量,Cdlg1 dlg1;Cdlg2 dlg2;Cdlg3 dlg4;
6、在主对话框的OnInitDialog()函数里添加下面的代码 :
// TODO: Add extra initialization here
//给Tab Control控件添加3个选项
m_tab.InsertItem(0," 发卡机 ");
m_tab.InsertItem(1,"收卡机");
m_tab.InsertItem(2,"LED显示屏");
//创建三个子窗口
dlg1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1)); //IDC_TAB1为放置的Tab Control控件的ID
dlg2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB1));
dlg3.Create(IDD_DIALOG3,GetDlgItem(IDC_TAB1));
//设置子窗体在m_tab控件范围内
CRect rect;
m_tab.GetClientRect(&rect);
rect.top+=20;
rect.bottom-=5;
rect.left+=5;
rect.right-=5;
dlg1.MoveWindow(&rect);
dlg2.MoveWindow(&rect);
dlg3.MoveWindow(&rect);
//让子窗体1显示出来
dlg1.ShowWindow(TRUE);
//设置Tab Control控件默认选择第0项
m_tab.SetCurSel(0);
7. 双击Tab Control控件并在响应函数里添加下面的代码。
void CTest_1Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
int CurSel;
CurSel=m_tab.GetCurSel();
switch(CurSel)
{
case 0:
Cdlg_1.ShowWindow(TRUE);
Cdlg_2.ShowWindow(FALSE);
Cdlg_3.ShowWindow(FALSE);
break;
case 1:
Cdlg_1.ShowWindow(FALSE);
Cdlg_2.ShowWindow(TRUE);
Cdlg_3.ShowWindow(FALSE);
break;
case 2:
Cdlg_1.ShowWindow(FALSE);
Cdlg_2.ShowWindow(FALSE);
Cdlg_3.ShowWindow(TRUE);
break;
default:;
}
*pResult = 0;
}
8. 最后效果如下。