microsoft mfc里如何做多tab页面
专栏:web开发笔记 Sept. 25, 2025, 4:36 p.m. 10 阅读
记录mfc做多tab页面的方法

一、主界面添加tab control

主界面添加tab control,并在OnInitDialog()里进行初始化配置。

用InsertItem依次插入多个tab页容器。每个tab页容器里创建子对话框,调整子对话框的大小与tab control大小一致。并设置默认显示第一个对话框,其它对话框隐藏。

	// Tabs
	CRect tab_rect;
	m_tab.GetClientRect(&tab_rect);
	tab_rect.top += 20;
	tab_rect.bottom -= 5;
	tab_rect.left += 5;
	tab_rect.right -= 5;
	
	m_tab.InsertItem(0, _T("tab1"));
	m_tab.InsertItem(1, _T("tab2"));
	m_tab.InsertItem(2, _T("tab3"));
	m_tab.InsertItem(3, _T("tab4"));
	m_tab.InsertItem(4, _T("tab5"));
	m_tab.InsertItem(5, _T("tab6"));

	m_tab1_dlg.Create(IDD_DIALOG1, GetDlgItem(IDC_TAB1));
	m_tab2_dlg.Create(IDD_DIALOG2, GetDlgItem(IDC_TAB1));
	m_tab3_dlg.Create(IDD_DIALOG3, GetDlgItem(IDC_TAB1));
	m_tab4_dlg.Create(IDD_DIALOG4, GetDlgItem(IDC_TAB1));
	m_tab5_dlg.Create(IDD_DIALOG5, GetDlgItem(IDC_TAB1));
	m_tab6_dlg.Create(IDD_DIALOG6, GetDlgItem(IDC_TAB1));

	m_tab1_dlg.MoveWindow(tab_rect);
	m_tab2_dlg.MoveWindow(tab_rect);
	m_tab3_dlg.MoveWindow(tab_rect);
	m_tab4_dlg.MoveWindow(tab_rect);
	m_tab5_dlg.MoveWindow(tab_rect);
	m_tab6_dlg.MoveWindow(tab_rect);

	m_tab1_dlg.ShowWindow(SW_SHOW);
	m_tab2_dlg.ShowWindow(SW_HIDE);
	m_tab3_dlg.ShowWindow(SW_HIDE);
	m_tab4_dlg.ShowWindow(SW_HIDE);
	m_tab5_dlg.ShowWindow(SW_HIDE);
	m_tab6_dlg.ShowWindow(SW_HIDE);
	
	m_tab.SetCurSel(0);

二、子对话框的必要设置

tab control里装载的每个子对话框,都需要手动创建,并设置。主要过程如下:

1、新建子对话框

在资源视图里右键“插入Dialog”

2、修改子对话框的属性

  • style改成child

  • border改成none

三、tab页面的切换

关联tab切换处理函数。

BEGIN_MESSAGE_MAP(CXXXDlg, CDialogEx)
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CXXXDlg::OnTcnSelchangeTab1)
END_MESSAGE_MAP()

在tab切换处理函数中,根据当前选择的tab,显示或隐藏对应的子对话框。

void CXXXDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	switch (m_tab.GetCurSel())
	{
	case 0:
		m_tab1_dlg.ShowWindow(SW_SHOW);
		m_tab2_dlg.ShowWindow(SW_HIDE);
		m_tab4_dlg.ShowWindow(SW_HIDE);
		m_tab5_dlg.ShowWindow(SW_HIDE);
		m_tab6_dlg.ShowWindow(SW_HIDE);
		m_tab3_dlg.ShowWindow(SW_HIDE);
		break;
	case 1:
		m_tab1_dlg.ShowWindow(SW_HIDE);
		m_tab2_dlg.ShowWindow(SW_SHOW);
		m_tab4_dlg.ShowWindow(SW_HIDE);
		m_tab5_dlg.ShowWindow(SW_HIDE);
		m_tab6_dlg.ShowWindow(SW_HIDE);
		m_tab3_dlg.ShowWindow(SW_HIDE);
		break;
	//other case...
	}
	*pResult = 0;
}
感谢阅读,更多文章点击这里:【专栏:web开发笔记】
最新20篇 开设专栏