在MFC当中使用Tab Control控件切换不同的界面,使用起来会复杂一些,至少是比Qt中的Tab Widget复杂得多。我接下来会以一个MFC对话框应用程序为例子,说明Tab Control控件的简单使用方法。
1.1建立一个MFC对话框应用程序,在对话框中拖入Tab Control控件,效果如下:
1.2在对话框类中,声明一个CTabCtrl变量:
CTabCtrl m_tab;
变量m_tab用来与对话框中的Tab Control控件交互,为此要在DoDataExchange函数中加入DDX_Control语句:
DDX_Control(pDX, IDC_TAB_TEST, m_tab);
2.1在资源中插入两个对话框,作为Tab Control控件切换的界面,然后必须将这两个对话框的Border属性设置为None,Style设置为Child,设置后的效果如下图所示:
2.2为创建的两个对话框建立两个类,如CTestDlg1,CTestDlg2,添加类的方法:右击对话框界面,在弹出框中选择添加类;
3.1在Tab Control控件所在的对话框类的头文件中添加以下内容并添加切换页面对话框的头文件:
public:
int m_CurSelTab;
CTestDlg1 m_page1;
CTestDlg2 m_page2;
CDialog* pDialog[2]; //用来保存对话框对象指针
3.2在对话框类的初始化函数中需要把CTestDlg1、CTestDlg2和Tab Control关联起来,并保存页面地址,设置初始页面,在OnInitDialog()中添加以下实现代码:
//为Tab Control增加两个页面
m_tab.InsertItem(0, _T("测试1"));
m_tab.InsertItem(1, _T("测试2"));
//创建两个对话框
m_page1.Create(IDD_DIALOG_TEST1, &m_tab);
m_page2.Create(IDD_DIALOG_TEST2, &m_tab);
//设定在Tab内显示的范围
CRect rc;
m_tab.GetClientRect(rc);
rc.top += 20;
rc.bottom -= 0;
rc.left += 0;
rc.right -= 0;
m_page1.MoveWindow(&rc);
m_page2.MoveWindow(&rc);
//把对话框对象指针保存起来
pDialog[0] = &m_page1;
pDialog[1] = &m_page2;
//显示初始页面
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
//保存当前选择
m_CurSelTab = 0;
这里我们用了一个CDialog指针数组来进行保存Tab Control的每个页面,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。
3.3为Tab Control添加消息处理程序,双击Tab Control控件,自动进入消息处理程序代码:
void CTabControlTestDlg::OnTcnSelchangeTabTest(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
//把当前的页面隐藏起来
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
//得到新的页面索引
m_CurSelTab = m_tab.GetCurSel();
//把新的页面显示出来
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
*pResult = 0;
}
本文参考的资料有:http://blog.csdn.net/hustspy1990/article/details/5425365