MFC
一.简介
这篇说一下Tab Control标签控件,我们以实际的例子进行说明,实现的功能就是点击不同的标签来切换到不同的画面
二.操作
- 在窗口界面上鼠标右键标签控件,选择添加变量 m_tab,
- 定义操作各界面的类变量,这里我们添加3个标签页,3个标签页对应三个窗口界面,注意添加个界面头文件(在含有标签页窗口的.h文件中)
CT1Dlg m_1Dlg; //界面1
CT2Dlg m_2Dlg; //界面2
CT3Dlg m_3Dlg; //界面3
- 设置表头 在OnInitDialog()初始化函数中人添加如下代码
CRect tabRect; // 标签控件客户区的位置和大小
m_tab.InsertItem(0, _T("标签1")); //插入第一个标签
m_tab.InsertItem(1, _T("标签2")); //插入第二个标签
m_tab.InsertItem(2, _T("标签3")); //插入第三个标签
// IDD_T1_DIALOG,IDD_T2_DIALOG,IDD_T3_DIALOG为三个窗口的ID
m_1Dlg.Create(IDD_T1_DIALOG, &m_tab); //创建标签第一个标签页
m_2Dlg.Create(IDD_T2_DIALOG, &m_tab); // 创建第二个标签页
m_3Dlg.Create(IDD_T3_DIALOG, &m_tab); // 创建第三个标签页
m_tab.GetClientRect(&tabRect); // 获取标签控件客户区Rect
// 调整tabRect,使其覆盖范围适合放置标签页
tabRect.left += 1;
tabRect.right -= 1;
tabRect.top += 25;
tabRect.bottom -= 1;
// 根据调整好的tabRect放置m_1Dlg子对话框,并设置显示
m_1Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
// 根据调整好的tabRect放置m_2Dlg子对话框,并设置为隐藏
m_2Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
// 根据调整好的tabRect放置m_3Dlg子对话框,并设置为隐藏
m_3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
- 添加标签控件的回调函数,鼠标左键双击标签控件,在回调函数中添加如下代码
void CEmptyDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
CRect tabRect; // 标签控件客户区的Rect
// 获取标签控件客户区Rect,并对其调整,以适合放置标签页
m_tab.GetClientRect(&tabRect);
tabRect.left += 1;
tabRect.right -= 1;
tabRect.top += 25;
tabRect.bottom -= 1;
switch ( m_tab.GetCurSel() )
{
// 显示m_1Dlg,隐藏其他
case 0:
m_1Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
m_2Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
break;
// 显示m_2Dlg,隐藏其他
case 1:
m_1Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_2Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
m_3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
break;
//显示m_3Dlg,隐藏其他
case 2:
m_1Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_2Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
break;
default:
break;
}
}