TabCtrl使用
0x1 新建子页面
插入三个对话框,ID分别为:IDD_PAGE_FILE、IDD_PAGE_NETWORK、IDD_PAGE_PROCESS
工具箱-【属性】-【Style】设置为【child】,【Border】设置为【None】
1、绑定类
每个对话框绑定一个对话框类
IDD_PAGE_FILE | CPAGEFile | 文件页 |
IDD_PAGE_NETWORK | CPAGENet | 网络页 |
IDD_PAGE_PROCESS | CPAGEProc | 进程页 |
0x2 调用对话框的页面操作
1、绑定变量
添加一个Tab Control控件,并为其关联一个CTabCtrl类型的控件变量m_tabCtrl
,ID为IDC_TAB_DEMO
。
在【MFC_05_TabCtrlDlg.h】文件里声明这三个类。
//Tab
CPAGEFile m_FilePage; // 文件页
CPAGENet m_NetPage; // 网络页
CPAGEProc m_ProcPage; // 进程页
#define MAX_DLG_PAGE 5 // 默认值,被切换的对话框数量
CDialog *m_pDialog[MAX_DLG_PAGE]; // 多少个选项
int m_CurSelTab; // 当前选中的选项
2、在OnInitDialog()初始化
以下所有代码都需要在OnInitDialog()函数中进行写入
m_tabCtrl.InsertItem(0, _T("文件"));
m_tabCtrl.InsertItem(1, _T("网络"));
m_tabCtrl.InsertItem(2, _T("进程"));
调整大小代码:
m_tabCtrl.SetPadding(19); // SetPadding设置选项卡之间间隔
m_tabCtrl.SetMinTabWidth(50); // SetMinTabWidth设置最小选项卡宽度
m_tabCtrl.SetItemSize(CSize(50,25)); // SetItemSize设置选项卡设置高度
非模态方式创建三个子对话框:
m_FilePage.Create(IDD_PAGE_FILE, &m_tabCtrl);
m_NetPage.Create(IDD_PAGE_NETWORK, &m_tabCtrl);
m_ProcPage.Create(IDD_PAGE_PROCESS, &m_tabCtrl);
设定在Tab内显示的范围
//设定在Tab内显示的范围
CRect rc;
m_tabCtrl.GetClientRect(rc);
rc.top += 25;
// rc.bottom -= 8;
// rc.left += 8;
// rc.right -= 8;
m_FilePage.MoveWindow(&rc);
m_NetPage.MoveWindow(&rc);
m_ProcPage.MoveWindow(&rc);
设置显示
//把对话框对象指针保存起来
m_pDialog[0] = &m_FilePage;
m_pDialog[1] = &m_NetPage;
m_pDialog[2] = &m_ProcPage;
//显示初始页面
m_pDialog[0]->ShowWindow(SW_SHOW);
m_pDialog[1]->ShowWindow(SW_HIDE);
m_pDialog[2]->ShowWindow(SW_HIDE);
//保存当前选择
m_CurSelTab = 0;
3、TCN_SELCHANGE消息处理函数
TabCtrl控件属性页-【控件事件】-【TCN_SELCHANGE】,然后就可以进行选项卡之间的切换了。
void CMFC05TabCtrlDlg::OnTcnSelchangeTabDemo(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
m_pDialog[m_CurSelTab]->ShowWindow(SW_HIDE); // 把当前的界面隐藏
m_CurSelTab = m_tabCtrl.GetCurSel(); // 获取选中的界面选项索引值
if (m_pDialog[m_CurSelTab])
{
m_pDialog[m_CurSelTab]->ShowWindow(SW_SHOW); // 只显示选中的界面选项
}
*pResult = 0;
}