MFC程序示例

打开VS2019,先基于对话框创建一个MFC应用程序MFCSample。删除对话框默认生成的控件。

在这里插入图片描述
在这里插入图片描述
经观察,可见发现,默认生成的工程中一共存在三个类:

  1. CAboutDialog
  2. CMFCSampleApp
  3. CMFCSampleDlg

主对话框类CMFCSampleDlg继承自CDialogEx,除了标准默认构造函数CMFCSampleDlg(CWnd* pParent = nullptr)外,还存在5个函数:

  • DoDataExchange(CDataExchange* pDX)
  • OnInitDialog()
  • OnPaint()
  • OnQueryDragIcon()
  • OnSysCommand(UINT nID, LPARAM lParam)

AppCMFCSampleApp实例化一个唯一的对象theApp,程序初始化函数InitInstance()作为程序的入口。

在工具箱中拖入一个Group Box控件,将文本修改为:参数

再拖入六个静态文本控件,各自关联变量后,将其放入Group Box控件中。

再拖入六个按钮控件,各自关联变量后,将其布局在Group Box控件下方。

在这里插入图片描述
该界面右侧拟准备放入Tab Control控件,每个标签页都是基于对话框的。参考文章:https://www.cnblogs.com/tinaluo/p/9675586.html

在这里插入图片描述
运行后,Tab Control控件中没有内容显示,因为还没有添加内容。

在这里插入图片描述

因此,先插入两个对话框备用,为两个对话框添加基于对话框的类:MyTabDlg1MyTabDlg2,现在的问题是如何将两个对话框插入到上述的标签页中。
在这里插入图片描述
记住,修改对话框的两个属性

在这里插入图片描述

首先,在主窗口类CMFCSampleDlg中,先将Tab Control控件关联变量m_Tab

在这里插入图片描述
再在该类中手动添加两个对话框的实例化变量,注意将头文件添加上。

在这里插入图片描述
此外,为了后续Tab标签页的切换,需要在类中添加两个变量

int m_CurSelTab;
CDialog* pDialog[5];  //用来保存对话框对象指针

接下来,便可以利用m_Tab变量将两个对话框变量dlg1dlg2添加进标签页。

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;
}

最终效果

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Star_ID/article/details/126558358