新建一个mfc项目a
在资源视图中,对a.rc右键,添加资源,选择Dialog,新建

之后会创建一个新的窗口,为窗口添加一个static text控件,改名为tab1

对窗口属性进行设置,Border设置为None,Style设置为Child


同样的方法,创建另一个窗口tab2
为窗口添加类,右击tab1窗口,添加类

起名为CTab1Dlg,点击完成

对于tab2窗口也是同样的操作
解决方案中多了两个窗口类

对于主窗口a,增加一个Tab Control控件

为此Tab Control控件增加变量,对控件右击,添加变量

设置变量名为m_tab,点击完成

在aDlg.h中包含两个窗口类的头文件
在CaDlg类中,增加两个窗口类的变量
private:
CTabCtrl m_tab;//Tab Control控件变量
CTab1Dlg m_tab1Dlg;//tab1窗口变量
CTab2Dlg m_tab2Dlg;//tab2窗口变量
在BOOL CaDlg::OnInitDialog()函数中,对标签控件进行设置
// TODO: 在此添加额外的初始化代码
//增加标签页
m_tab.InsertItem(0,L"Tab1");
m_tab.InsertItem(1,L"Tab2");
//创建标签页,IDD_DIALOG1,IDD_DIALOG2是标签页窗口的ID
m_tab1Dlg.Create(IDD_DIALOG1,&m_tab);
m_tab2Dlg.Create(IDD_DIALOG2,&m_tab);
// 获取标签控件客户区Rect
CRect rect;
m_tab.GetClientRect(&rect);
//窗口下移防止遮挡tab控件的标签头
rect.top += 22;
//放置标签页窗口并显示
m_tab1Dlg.SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_SHOWWINDOW);
m_tab2Dlg.SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_HIDEWINDOW);
之后需要为Tab Control控件添加事件监听,实现的是,切换不同标签页,能够显示不同的标签页窗口
对Tab Control控件右击,添加事件处理程序

选择TCN_SELCHANGE,类列表CaDlg,点击添加编辑

之后在void CaDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)函数中编辑事件处理代码
void CaDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
switch (m_tab.GetCurSel())
{
//切换到标签0,显示tab1标签
case 0:
m_tab1Dlg.ShowWindow(TRUE);
m_tab2Dlg.ShowWindow(FALSE);
break;
//切换到标签1,显示tab2标签
case 1:
m_tab1Dlg.ShowWindow(FALSE);
m_tab2Dlg.ShowWindow(TRUE);
break;
default:
m_tab1Dlg.ShowWindow(TRUE);
break;
}
*pResult = 0;
}
实现的效果
