最近更新于 2025-03-16 16:25
测试环境
- Windows 11 专业版
- Visual Studio 2022(ISO C++14)
- 详细:https://blog.iyatt.com/?p=18843#%E7%8E%AF%E5%A2%83
使用示例
新建一个 MFC 应用 tabControlProject,基于对话框
删除预留控件,拖放一个 Tab Control 上去
在控件上右键添加变量
变量名:tabControl
插入一个对话框
属性 ID 设为 MAIN_DIALOG,边框设为None,样式设为Child
界面上放点控件
在对话框空白处右键添加类 MainDialog
同样方式再创建一个对话框,属性 ID 设为 HELP_DIALOG,边框设为None,样式设为Child,界面上 放点控件
同样为这个对话框添加类 HelpDialog
编辑 CtabControlProjectDlg 类头文件,写入
(注意引用 MainDialog 和 HelpDialog 头文件)
private:
MainDialog* mainDlg = nullptr;
HelpDialog* helpDlg = nullptr;
这个用于存储子对话框窗口
然后再编辑它的源文件中的 OnInitDialog 方法,添加在 TODO 注释的下面
// 添加标签
this->tabControl.InsertItem(0, L"主页");
this->tabControl.InsertItem(1, L"帮助");
// 标签控件铺满窗口
CRect winRect;
GetClientRect(winRect);
this->tabControl.MoveWindow(winRect);
// 创建子对话框对象
this->mainDlg = new MainDialog();
this->helpDlg = new HelpDialog();
// 创建子对话框,并以标签页为父窗口
this->mainDlg->Create(MAIN_DIALOG, &this->tabControl);
this->helpDlg->Create(HELP_DIALOG, &this->tabControl);
// 子对话框铺满标签控件
this->tabControl.AdjustRect(FALSE, winRect); // FALSE 时在传入的矩形上剪切掉标签页区域
this->mainDlg->MoveWindow(winRect);
this->helpDlg->MoveWindow(winRect);
// 设置默认选中第一个标签,并显示对应子窗口
this->tabControl.SetCurSel(0);
this->mainDlg->ShowWindow(SW_SHOW);
在标签控件上右键属性,点开⚡标志,添加 TCN_SELCHANGE 事件回调
写入
// 获取当前选中项
int sel = this->tabControl.GetCurSel();
switch (sel)
{
case 0:
{
// 显示主窗口,隐藏帮助窗口
this->mainDlg->ShowWindow(SW_SHOW);
this->helpDlg->ShowWindow(SW_HIDE);
break;
}
case 1:
{
// 隐藏主窗口,显示帮助窗口
this->mainDlg->ShowWindow(SW_HIDE);
this->helpDlg->ShowWindow(SW_SHOW);
break;
}
}
这样就实现了点击标签页切换显示的窗口
调试运行效果
MFC:Tab Control 标签控件