原文:http://blog.sina.com.cn/s/blog_6a06aec90100l3x6.html
Tab Control控件的应用
关于Tab Control控件的应用
首先,新建一个基于对话框的MFC应用程序,添加Tab Control控件,并为其添加变量CTabCtrl m_tab;
然后,新建两个对话框,均设置属性如下(这步很重要):Style--Child,Border--None
分别为这两个对话框建立新类CPage1和CPage2。
该程序用了一个CDialog的指针数组来进行保存各个页面,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。 声明变量:CDialog *pDialog[2],包含CPage1,CPage2头文件并声明变量,CPage1 m_page1, CPage2 m_page2.并且添加一个int型变量用于保存当前活动的页面索引,int m_CurSelTab;
接着,在OnInitDialog函数中添加如下代码:
这样就可进行正常的显示了,如果响应页面切换这个事件,可以为Tab Control控件添加消息响应函数:OnSelchangeTab,并在该函数中添加如下代码:
void CHustojExManngerDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
//得到页面的数据
CString str;
int nNewSel = m_tab.GetCurSel();
if (m_CurSelTab != nNewSel)
{
showTab(nNewSel);
}
if(m_CurSelTab==0)
{
m_page1.UpdateData(TRUE);
// m_page1.GetDlgItem(IDC_EDIT_PAGE1)->GetWindowText(str);
}
if(m_CurSelTab==1)
{
m_page2.UpdateData(TRUE);
// m_page2.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);
}
if(m_CurSelTab==2)
{
m_page2.UpdateData(TRUE);
// m_page3.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);
}
if(m_CurSelTab==3)
{
m_page3.UpdateData(TRUE);
// m_page3.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);
}
//首先我们先把当前的页面隐藏起来,然后得到新的页面索引,最后就把相关页面显示出来即可。这比一个个去枚举简单多了。
*pResult = 0;
}
void CHustojExManngerDlg::showTab(int nIndex)
{
CRect rectClient;
m_tab.GetClientRect(&rectClient);
rectClient.top += 33;
rectClient.left += 1;
rectClient.right -= 3;
rectClient.bottom -= 2 ;
pDialog[m_CurSelTab]->SetWindowPos(NULL,rectClient.left,rectClient.top,rectClient.Width(),rectClient.Height(),SWP_HIDEWINDOW);
pDialog[nIndex]->SetWindowPos(NULL,rectClient.left,rectClient.top,rectClient.Width(),rectClient.Height(),SWP_SHOWWINDOW);
m_CurSelTab = nIndex;
}