1,先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control控件放到对话框中的合适位置上。
再在对话框类中,声明一个CTabCtrl变量:
CTabCtrl m_tab;
变量m_tab用来与对话框中的Tab Control控件交互,为此要在DoDataExchange函数中加入DDX_Control语句:
1 //{{AFX_DATA_MAP(CTABDlg)
2 DDX_Control(pDX, IDC_TAB, m_tab);
3 //}}AFX_DATA_MAP
IDC_TAB是Tab Control控件的ID。
2,建立两个对话框程序,用来当做Tab Control控件的两个页。别忘了把Style改为Child,Border改为None。然后就可以在上面加其他控件了。
接着分别为这两个对话框建立两个类,比如CPage1和CPage2。
然后在对话框类头文件中,加入这两个对话框对象。同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。
int m_CurSelTab;
CPage1 m_page1;
CPage2 m_page2;
CDialog* pDialog[2]; //用来保存对话框对象指针
在对话框类的初始化函数中需要把CPage1、CPage2和Tab Control关联起来,并保存页面地址,设置初始页面。
1 // TODO: Add extra initialization here
2 //初始化TAB
3 TCITEM tc1,tc2;
4 tc1.mask = TCIF_TEXT;
5 tc1.pszText = _T("第一页");
6 tc2.mask = TCIF_TEXT;
7 tc2.pszText = _T("第二页");
8
9 m_tab.InsertItem(0, &tc1);
10 m_tab.InsertItem(1, &tc2); //到这里只是添加了两个tab页
11
12 CRect rec;
13 m_tab.GetClientRect(&rec);//获得TAB控件的坐标
14
15 //定位选项卡页的位置,这里可以根据情况自己调节偏移量
16 rec.bottom -= 2;
17 rec.left += 1;
18 rec.top += 27;
19 rec.right -= 3;
20
21 //创建子页面
22 m_page1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB));
23 m_page2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB));
24
25 //将子页面移动到指定的位置
26 m_page1.MoveWindow(&rec);
27 m_page2.MoveWindow(&rec);
28
29 //显示子页面
30 m_page1.ShowWindow(SW_SHOW);
31 m_page2.ShowWindow(SW_HIDE);
3,接下来,为Tab Control添加消息处理程序:
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CTabDlg::OnTcnSelchangeTab1)
1 // TODO: Add your control notification handler code here
2 switch(m_tab.GetCurSel())
3 {
4 case 0:
5 m_page1.ShowWindow(SW_SHOW);
6 m_page2.ShowWindow(SW_HIDE);
7 break;
8 case 1:
9 m_page1.ShowWindow(SW_HIDE);
10 m_page2.ShowWindow(SW_SHOW);
11 break;
12 default:
13 break;
14 }
搞定。