打开VS2019,先基于对话框创建一个MFC
应用程序MFCSample
。删除对话框默认生成的控件。
经观察,可见发现,默认生成的工程中一共存在三个类:
CAboutDialog
CMFCSampleApp
CMFCSampleDlg
主对话框类CMFCSampleDlg
继承自CDialogEx
,除了标准默认构造函数CMFCSampleDlg(CWnd* pParent = nullptr)
外,还存在5个函数:
DoDataExchange(CDataExchange* pDX)
OnInitDialog()
OnPaint()
OnQueryDragIcon()
OnSysCommand(UINT nID, LPARAM lParam)
而App
类CMFCSampleApp
实例化一个唯一的对象theApp
,程序初始化函数InitInstance()
作为程序的入口。
在工具箱中拖入一个Group Box
控件,将文本修改为:参数。
再拖入六个静态文本控件,各自关联变量后,将其放入Group Box
控件中。
再拖入六个按钮控件,各自关联变量后,将其布局在Group Box
控件下方。
该界面右侧拟准备放入Tab Control
控件,每个标签页都是基于对话框的。参考文章:https://www.cnblogs.com/tinaluo/p/9675586.html
运行后,Tab Control
控件中没有内容显示,因为还没有添加内容。
因此,先插入两个对话框备用,为两个对话框添加基于对话框的类:MyTabDlg1
和MyTabDlg2
,现在的问题是如何将两个对话框插入到上述的标签页中。
记住,修改对话框的两个属性
首先,在主窗口类CMFCSampleDlg
中,先将Tab Control
控件关联变量m_Tab
再在该类中手动添加两个对话框的实例化变量,注意将头文件添加上。
此外,为了后续Tab
标签页的切换,需要在类中添加两个变量
int m_CurSelTab;
CDialog* pDialog[5]; //用来保存对话框对象指针
接下来,便可以利用m_Tab
变量将两个对话框变量dlg1
和dlg2
添加进标签页。
在CMFCSampleDlg::OnInitDialog()
函数中添加初始化代码
// 添加选项卡
m_Tab.InsertItem(0, _T("标签页1"));
m_Tab.InsertItem(1, _T("标签页2"));
m_Tab.InsertItem(2, _T("标签页3"));
m_Tab.InsertItem(3, _T("标签页4"));
m_Tab.InsertItem(4, _T("标签页5"));
//创建两个对话框
dlg1.Create(IDD_DIALOG1, &m_Tab);
dlg2.Create(IDD_DIALOG2, &m_Tab);
//设定在Tab内显示的范围
CRect rc;
m_Tab.GetClientRect(rc);
rc.top += 30;
rc.bottom -= 0;
rc.left += 0;
rc.right -= 0;
dlg1.MoveWindow(&rc);
dlg2.MoveWindow(&rc);
//把对话框对象指针保存起来
pDialog[0] = &dlg1;
pDialog[1] = &dlg2;
//显示初始页面
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
//保存当前选择
m_CurSelTab = 0;
并添加Tab Control
控件切换的消息处理函数
void CMFCSampleDlg::OnTcnSelchangeTab2(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: 在此添加控件通知处理程序代码
//把当前的页面隐藏起来
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
//得到新的页面索引
m_CurSelTab = m_Tab.GetCurSel();
//把新的页面显示出来
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
*pResult = 0;
}
最终效果