本文转载自:https://blog.csdn.net/c1149884598/article/details/103297512
首先,新建一个基于对话框的mfc工程,添加dialog资源,IDD_TEST1,IDD_TEST2, IDD_TEST3,分别将属性border设置为none,style设置为child,并分别添加到类中CTest1,CTest2,CTest3。
其次,在CxxxDlg的头文件中,引用CTest1,CTest2,CTest3的头文件。并在类中添加
public:
CTest1 t1;
CTest2 t2;
CTest3 t3;
然后,在mfc中IDD_MY_DIALOG资源中添加标签页控件,并将其添加到变量m_tab,并添加事件TCN_SELCHANGE。
我们在头文件可以看到以下代码
//双击空间实现函数
afx_msg void OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult);
//标签页控件变量
CTabCtrl m_tab;
最后,在在OnInitDialog函数中添加代码
CRect tabRect; // 标签控件客户区的Rect
// 获取标签控件客户区Rect,并对其调整,以适合放置标签页
m_tab.GetClientRect(&tabRect);
tabRect.left += 1;
tabRect.right -= 1;
tabRect.top += 25;
tabRect.bottom -= 1;
m_tab.InsertItem(0, _T("测试1")); // 插入第一个标签
m_tab.InsertItem(1, _T("测试2")); // 插入第二个标签
m_tab.InsertItem(2,_T("测试3")); //第三个标签
//控件ID
t1.Create(IDD_TEST1, &m_tab); // 创建第一个标签页
t2.Create(IDD_TEST2, &m_tab); // 创建第二个标签页
t3.Create(IDD_TEST3, &m_tab);//创建第三个标签页
// 根据调整好的tabRect放置t1子对话框,并设置为显示
t1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
// 根据调整好的tabRect放置t2子对话框,并设置为隐藏
t2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
// 根据调整好的tabRect放置t3子对话框,并设置为隐藏
t3.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
在在OnTcnSelchangeTab1函数中添加以下代码
CRect tabRect; // 标签控件客户区的Rect
// 获取标签控件客户区Rect,并对其调整,以适合放置标签页
m_tab.GetClientRect(&tabRect);
tabRect.left += 1;
tabRect.right -= 1;
tabRect.top += 25;
tabRect.bottom -= 1;
switch (m_tab.GetCurSel()) //返回组合框中列表框中当前选中的项的下标。如果没有选中项,则返回CB_ERR。
{
// 如果标签控件当前选择标签为“测试1”
case 0:
t1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
t2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
t3.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
break;
// 如果标签控件当前选择标签为“测试2”
case 1:
t1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
t2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
t3.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
break;
// 如果标签控件当前选择标签为“测试3”
case 2:
t1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
t2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
t3.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
break;
default:
break;
}