一、主界面添加tab control
主界面添加tab control,并在OnInitDialog()里进行初始化配置。
用InsertItem依次插入多个tab页容器。每个tab页容器里创建子对话框,调整子对话框的大小与tab control大小一致。并设置默认显示第一个对话框,其它对话框隐藏。
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、修改子对话框的属性
三、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;
}
*pResult = 0;
}