【MFC】学习笔记:对话框中添加控件和控件变量

本文通过一个计算器实例,详细介绍了如何在MFC对话框中添加控件及控件变量,包括静态文本、编辑框、单选按钮等,演示了数据交换与计算逻辑的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MFC系列一直被搁置,找不到时间来写学习笔记。今天就先写一篇很基础的对话框里加控件与给控件设置控件变量。

本节不同于其他文章,直接用案例来感受对话框中添加控件和控件变量的理论概述.

创建对话框与修改对话框这里我就不说了,前面写过一篇:MFC学习笔记:创建与修改对话框不知道怎么创建的请跳转上一篇。

- 案例讲解

1.按照创建对话框的步骤创建一个标题为Calculators的基于对话框的工程.

2.切换到资源视图,如果没有,请点击视图->其他窗口->资源视图,就设置出来了。

3.删除掉Calcutors对话框里默认的static文本框。

4.点击左手边,或者右手边的工具栏(看设置,默认是在右手边)出现下图所示的界面。
工具栏
5.分别添加三个static Text,命名为数据 1,数据2,结果。三个Edit Control,并且分别选择Edit Control点击鼠标右键,选择添加变量->类别选择Value,变量类型选择int或者double都可以,分别取变量名为m_nData1.m_nData2,m_nData4.

6.选择Group Box拖动到对话框,改变大小,Caption设置为选择计算方式,在组对话框(Group Box)里面分别添加4个单选框按钮(Radio Box),设置第一个Group为TRUE,然后添加变量,类别为Value,变量类型选择int,变量名设置为m_nCalc,然后确定。

7.计算结果和退出程序将确定和取消拉到相应位置改一下caption,双击计算结果和退出程序,添加消息响应函数(三种添加消息响应函数,知道这一种就ok了,也是最常用的,没人会去用另外两种,这里不多介绍)

void CCalculatorsDlg::OnBnClickedOk()
{
	UpdateData(); //默认为TRUE,将控件值赋值给控件变量,MFC中有一节,我讲过这个函数.
	
	if(m_nCalc == 0)
	{
		m_nData3 = m_nData1 + m_nData2;
	}
	else if(m_nCalc == 1)
	{
		if(m_nData1 < m_nData2)
		{
			AfxMessageBox(_T("结果不能为负数,所以数据1不能小于数据2,请重新输入!"));
		}
		else
		{
			m_nData3 = m_nData1 - m_nData2;
		}
	]
	else if(m_nCalc == 2)
	{
		m_nData3 == m_nData1 * m_nData2;
	}
	else if(m_nCalc == 3)
	{
		if(m_nData2 == 0)
		{
			AfxMessageBox(_T("被除数不能为0,请重新输入!"));
		}
		else
		{
			m_nData3 = m_nData1 / m_nData2;
		}
	}

UpdateData(FALSE); //更新数据,计算结果,使控件变量赋值给控件。
}

//退出程序
void CCalculatorsDlg::OnBnClickedCance()
{
	//TODO在这里添加程序代码
	CDialogEX::OnCancel();
}

//程序中可以不使用UpdateData(),下面是另一个版本.用Window API实现.

void CCalculatorsDlg::OnBnClickedOk()
{
	UpdateData(); //默认为TRUE,将控件值赋值给控件变量,MFC中有一节,我讲过这个函数.
	
	if(m_nCalc == 0)
	{
		m_nData3 = m_nData1 + m_nData2;
		SetDlgItemInt(IDC_RADIO_RESULT,m_nData3); 
	}
	else if(m_nCalc == 1)
	{
		if(m_nData1 < m_nData2)
		{
			AfxMessageBox(_T("结果不能为负数,所以数据1不能小于数据2,请重新输入!"));
		}
		else
		{
			m_nData3 = m_nData1 - m_nData2;
			SetDlgItemInt(IDC_RADIO_RESULT,m_nData3); 
		}
	]
	else if(m_nCalc == 2)
	{
		m_nData3 == m_nData1 * m_nData2;
		SetDlgItemInt(IDC_RADIO_RESULT,m_nData3); 
	}
	else if(m_nCalc == 3)
	{
		if(m_nData2 == 0)
		{
			AfxMessageBox(_T("被除数不能为0,请重新输入!"));
		}
		else
		{
			m_nData3 = m_nData1 / m_nData2;
			SetDlgItemInt(IDC_RADIO_RESULT,m_nData3); 
			/*
			参数1:控件ID 参数2:计算结果的变量名
			*/
		}
	}
}

//第一个是必须用UpdateData的值的,因为你要将值动态赋值给变量,SetDlgItemInt这个函数是办不到的。

//退出程序
void CCalculatorsDlg::OnBnClickedCance()
{
	//TODO在这里添加程序代码
	CDialogEX::OnCancel();
}

8.程序图如下:
计算器

//数据交换的代码,程序自动添加,在你添加控件变量的时候(贴出来看下):
由于不能粘贴公司代码,只能网上找了一段数据交换的

void CAdditionDlg::DoDataExchange(CDataExchange* pDX)   
{   
    // 处理MFC默认的数据交换   
    CDialogEx::DoDataExchange(pDX);   
    // 处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换   
    DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);   
    // 处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换   
    DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);   
    // 处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换   
    DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);   
}  

相信大家动手写一个这个案例之后,对对话框添加控件和添加控件变量就有了一定的了解了,这个时候自己再慢慢扩展一下,就非常的轻松了。
希望这篇文章对自学MFC的人有一定帮助,谢谢。
版权声明:转载请注明出处.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值