mfc 中如何添加标签页(超详细)

首先,新建一个基于对话框的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"));     //第三个标签

	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;   
	} 

这样,我们就得到如下效果。
在这里插入图片描述
在这里插入图片描述

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值