优秀的编程知识分享平台

网站首页 > 技术文章 正文

一文详解MFC Tab Control 选项卡控件

nanyue 2025-06-13 15:42:35 技术文章 2 ℃

Tab Control 控件

CTabCtrl是Tab Control控件类,可以将多个对话框集合到一个页面中,通过切换标签达到切换页面的效果,实现选项卡功能。

初始化选项卡

给tab控件绑定变量m_tab,通过InsertItem添加tab的标题,常用参数1表示tab下标序号,参数2为标题文字,参数3本样例未给出,为图标列表的序号,需要添加图标可以启用参数3。

m_tab.InsertItem(0, _T("Page1"));
m_tab.InsertItem(1, _T("Page2"));
m_tab.InsertItem(2, _T("Page3"));
m_tab.InsertItem(4, _T("Page4"));
m_tab.InsertItem(4, _T("Page5"));
m_tab.InsertItem(5, _T("Page6"));

添加对话框资源

仅仅初始化如上6个tab标签,切换时界面并没有发生变化,还需要创建对应6个界面,即6个对话框。

对话框是一种资源,在资源视图-对话框-鼠标右键单击-插入,本样例只给出两个对话框,其余操作都是相同的。

每个对话框放置一个按钮或者其他类型控件作为区分:

此处注意属性设置,样式:Child,边框:None:

然后再给对应对话框添加类,会自动生成对应.h头文件和.cpp文件:

关联子对话框和m_tab:

m_dlg_page1.Create(IDD_DLG_PAGE1, &m_tab);
m_dlg_page2.Create(IDD_DLG_PAGE2, &m_tab);

子控件区域比m_tab要小一些,先获取m_tab位置,在其基础上缩小,然后放置子控件。默认选择下标为0的tab和第一个对话框:

CRect rect;
m_tab.GetClientRect(rect);
rect.top += 30;
rect.left += 8;
rect.right -= 8;
rect.bottom -= 8;
m_dlg_page1.MoveWindow(rect);
m_dlg_page2.MoveWindow(rect);

m_tab.SetCurSel(0);
m_dlg_page1.ShowWindow(SW_SHOW);

添加切换tab事件

void CDemoDlg::OnTcnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
	switch (m_tab.GetCurSel())
	{
	case 0:
		m_dlg_page1.ShowWindow(SW_SHOW);
		m_dlg_page2.ShowWindow(SW_HIDE);
		break;
	case 1:
		m_dlg_page1.ShowWindow(SW_HIDE);
		m_dlg_page2.ShowWindow(SW_SHOW);
		break;
	default:
		break;
	}
	*pResult = 0;
}

Tags:

最近发表
标签列表