在MFC应用程序中,使用Tab控件的步骤如下:
(1)在界面上添加一个Tab控件,绑定一个对应的控制变量,可命名为m_ctrlTab;
(2)创建两个或多个子对话框,记得调整其属性:
Border:none // 去掉子窗口边框
Style:Child // 作为其他窗口的子窗口
当然,还可以修改一下对话框的名称等,针对子窗口的编辑跟其他窗口是一样的。同时为每一个子窗口创建相应的类。
(3)在主窗口类中添加子窗口类的对象成员,例如:
CDialog1 m_Dialog1;
CDialog2 m_Dialog2;
(4)在主窗口类的OnInitDialog()函数中添加:
// 创建标签页
TCITEM tabItem;
tabItem.mask = TCIF_TEXT;
tabItem.pszText = "通道配置";
m_ctrlTab.InsertItem(0, &tabItem);
tabItem.pszText = "端口配置";
m_ctrlTab.InsertItem(1, &tabItem);
// 创建标签页子窗口
m_Dialog1.Create(IDD_DIALOG1, &m_ctrlTab);
m_Dialog2.Create(IDD_DIALOG2, &m_ctrlTab);
// 窗口布局
CRect tabRect;
m_ctrlTab.GetClientRect(&tabRect);
tabRect.left += 5;
tabRect.right -= 5;
tabRect.top += 25;
tabRect.bottom -= 10;
m_Dialog1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
m_Dialog2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
(5)为主窗口中的Tab控件添加一个TCN_SELCHANGE消息的相应函数,在该函数内实现标签页的切换效果:
void CFdcDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
CRect tabRect;
m_ctrlTab.GetClientRect(&tabRect);
tabRect.left += 5;
tabRect.right -= 5;
tabRect.top += 25;
tabRect.bottom -= 10;
switch (m_ctrlTab.GetCurSel())
{
case 0:
m_Dialog1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
m_Dialog2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
break;
case 1:
m_Dialog1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_Dialog2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
break;
}
}