基于VS2010平台的MFC入门编程——简易加法计算器

平台/工具:VS2010
目的:利用VS2010平台创建一个MFC工程,实现加法运算器的程序编写和界面设计
项目分析:实现加法计算有几个必要的因素——被加数、加数、和。被加数和加数需要输入,和需要输出显示。这几个因素都需要相应的控件来输入或显示,建立基于对话框的MFC应用程序后,需要分别添加相应的控件,配合一定的代码来实现简易加法计算器界面的编程设计
方法步骤
Step1:打开VS2010->文件->新建->项目->单击“MFC应用程序”,给项目命名为“Addition”,选择合适的存储路径->确定-> “MFC应用程序向导”对话框
这里写图片描述
单击下一步,出现如下对话框
这里写图片描述
选择“基于对话框”,其他默认,单击下一步,出现以下对话框
这里写图片描述
直接单击下一步,出现如下对话框
这里写图片描述
直接单击下一步,出现如下对话框这里写图片描述
在“生成的类”对话框选择后面字母为Dlg的类->单击“完成”
至此,完成一个名为“Addition”的MFC应用程序工程的创建。

Step 2:建立好基于对话框的工程后,会看到如下Addition对话框界面:
这里写图片描述
打开“解决方案资源管理器”,会看到如下的信息:包含一些说明以及cpp文件、头文件,“资源视图”中会看到上面这个Dialog,即“IDD_ADDITION_DIALOG”
这里写图片描述
对Addition对话框进行如下操作:
(1)删除对话框原有的“TODO:在此放置对话框控件”以及“确定”按钮,选中“取消”按钮->右键->属性,在界面右侧出现的属性页面中将其Caption对应的名称改为“退出”,ID改为“IDC_QUIT_BUTTON”,双击该按钮进入主程序,添加如下代码,以便在运行窗口单击“退出”时,窗口消失。
这里写图片描述
(2)将工具箱中的“Static Text”拖到Addition对话框中适当的位置,为对话框添加三个静态文本框(Static Text),用于显示字符串——被加数、加数、和。在属性栏上将被加数、加数、和的Caption属性修改为“被加数”“加数”“和”,ID改为IDC_SUMMAND_STATIC 、IDC_ADDEND_STATIC 、IDC_SUM_STATIC。
(3)将工具箱中的“Edit Control”拖到Addition对话框中适当的位置,为对话框添加三个编辑框(Edit Control),用来输入被加数、加数以及显示它们的和。将被加数、加数、和对应的编辑框的ID号改为IDC_SUMMAND_EDI、IDC_ADDEND_EDIT、IDC_SUM_EDIT。
(4)将工具箱中的“Button”拖到Addition对话框中与“退出”按钮平齐的位置,用于在被点击后触发加法计算。修改其Caption属性为“计算”,ID改为IDC_ADD_BUTTON。
(5)工具箱部分视图以及做完之后的Addtion对话框是这样的:
这里写图片描述
(6)在“示例编辑框”上单击右键,在右键菜单中选择“添加变量”(Add Variable)。弹出添加成员变量的向导对话框。勾选“控件变量(Control Variable)”
在对话框“类别(Category)”下拉列表中选择Value;
在“变量类型(Variable type)”下拉列表中选择double;
在“变量名(Variable name)”中写入自定义的变量名。将被加数、加数、和的名字分别命名为m_editSummand 、m_editAddend 、 m_editSum 。
(7)添加代码:上述工作做完后,双击“计算”按钮,进入AdditionDlg.cpp程序,其中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);

此外,在主程序中的void CAdditionDlg::OnBnClickedAddButton()函数体中添加如下代码:
//将各种控件中的数据保存到相应的变量
UpdateData(TRUE);
//将被加数和加数的和赋值给m_editSum
m_editSum=m_editSummand+m_editAddend;
//根据各变量的值更新相应的控件,和的编辑框会显示m_editSum的值
UpdateData(FALSE);

Step 3:查看及设置控件Tab顺序
运行程序,显示对话框后不进行任何操作,而直接按回车键,则看到对话框退出了,这是因为“退出”按钮是Tab顺序为1的控件,也就是第一个接受用户输入的控件。但是按照我们的输入习惯,应该是被加数的编辑框首先接受用户输入,然后是加数编辑框,再接下来是“计算”按钮,最后才是“退出”按钮。因此需要修改Tab顺序。方法如下:
按快捷键Ctrl+D,对话框模板上就会显示各个控件的Tab顺序。它是按照对该对话框添加控件的先后来自动排序的,由于先对默认的“取消”按钮操作,改为“退出”,其次添加三个“Static Text”框用于编辑“被加数”、“加数”、“和”等字眼,然后添加三个“Edit Control”编辑框用于显示用户输入的数字(顺序是“被加数”右侧的编辑框->“加数”右侧的编辑框“和”右侧的编辑框),最后添加“计算”按钮,因此Tab响应顺序如下左图所示:
这里写图片描述
要修改顺序,只需从自己认为Tab顺序应该为1的控件开始依次单击,随着单击的完成,各控件的Tab响应顺序也按我们的想法设置好了,设置好的Tab顺序如上面右图。
:经检验,这个修改并没有太大意义,因为运行程序后不做任何操作直接按“Enter”键,对话框还是会退出。

Step 4: 模态对话框及其弹出过程
完善对话框设计,希望在相应编辑框输入“被加数”的值、“加数”的值后,单击“计算”按钮时首先跳出一个询问对话框,然后再进行计算。步骤如下:
(1)在“资源视图(ResourceView)”中的“Dialog”上点右键选择“插入Dialog(InsertDialog)”,创建一个新的对话框模板,修改其ID为IDD_TIP_DIALOG,Caption改为“提示”。
(2)在对话框模板上添加一个静态文本框(static text),Caption改为“您确定要进行加法计算吗?”,完成后的对话框如下:
这里写图片描述
(3)在对话框模板上点右键选择“添加类(Add Class… )”,弹出添加类的对话框,设置“类名(Class name)”为CTipDlg,点“完成”。在“解决方案资源管理器 (Solution Explorer)”中可以看到生成了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp。
(4)在AdditionDlg.cpp中包含CTipDlg的头文件:#include”TipDlg.h”。(Addition为你创建的项目名,不同项目可能不同)
这里写图片描述
(5)单击“计算”按钮,跳转到该按钮对应的程序,将下面的代码加进来:
//———添加的“提示对话框”所需的代码———–
INT_PTR nRes; // 用于保存DoModal函数的返回值
CTipDlg tipDlg; // 构造对话框类CTipDlg的实例
nRes = tipDlg.DoModal(); // 弹出对话框
if (IDCANCEL == nRes) // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行
return;
//————————————————–
效果如图(后面的UpdateData代码在之前的操作中已经添加过):
这里写图片描述

Step 5:添加属性页,创建向导
属性页对话框想必大家并不陌生,windows系统中桌面右键->属性,弹出的就是属性页对话框,它通过标签切换各个页面。另外,我们在创建MFC工程时使用的向导对话框也属于属性页对话框,它通过点击“下一步”等按钮来切换页面。下面就具体将如何创建和配置对话框,创建属性表类以及显示向导对话框。
(1)创建和配置对话框(创建属性页对话框资源)
在“资源视图(Resource View)”的“Dialog”节点上单击右键,然后在右键菜单中选择“插入Dialog(Insert Dialog)”,连续创建三个对话框模板,分别对应被加数,加数,和。将这三个对话框的ID分别设置为IDD_SUMMAND_PAGE 、 IDD_ADDEND_PAGE 、 IDD_ADD_PAGE ,对应的Caption分别为“被加数页”“加数页”“计算页”。Style属性在下拉列表中都选择“Child”,Border属性在下拉列表中都选择“Thin”。删除对话框中默认的“确定”和“取消”按钮。
这里写图片描述
在“被加数页”对话框模板上单击右键,在右键菜单中选择“添加类(Add Class)”,弹出类向导对话框,在“类名(Class name)”编辑框中输入类名“CSummandPage”,与之前不同的是,因为属性页类都应继承于CPropertyPage类,所以要修改下面“基类(Base class)”选项,在下拉列表中选择“CPropertyPage”。 如上面右侧图所示。
注意:不要选成COlePropertyPage,否则属性中将没有“OnSetActive”选项
在“类视图(Class View)”中找到“CSummandPage”节点,选中它,右键->属性,然后VS2010右侧面板上出现其属性列表,属性列表的工具栏上有个tip信息为“重写(Overrides)”的按钮,按下它,找到“OnSetActive”,点其右侧空白列表项出现向下箭头,再选“OnSetActive”,如下面右侧图。
这里写图片描述
在SummandPage.cpp的OnSetActive函数体中添加如下代码实现添加“下一步”按钮的效果:
//——————–添加的代码——————-
// 获得父窗口,即属性表CPropertySheet类
CPropertySheet* psheet = (CPropertySheet*) GetParent();
// 设置属性表只有“下一步”按钮
psheet->SetWizardButtons(PSWIZB_NEXT);
//————————————————-
这里写图片描述
在“被加数页”对话框中添加一个静态文本框“Static Text”,其Caption属性改为“请输入double型加数”(注意将该框拉大,大于文字实际框,否则运行时会文字显示不全),ID默认。
这里写图片描述
“加数页”以及“计算页”对话框也做类似操作,添加的类分别命名为“CAddendPage”、“CAddPage”,其他同“被加数页”操作,需要注意的是“加数页”对话框只需要添加类就可以,不需要OnSetActive的相关操作,“计算页”除OnSetActive函数体中的代码与“被加数页”不同之外,其他均同,其代码如下:
//——添加代码———–
// 获得父窗口,即属性表CPropertySheet类
CPropertySheet* psheet = (CPropertySheet*) GetParent();
//设置属性表只有“完成”按钮
psheet->SetFinishText(_T(“完成”));
//————————-
这里写图片描述
注意:字符串“完成”前加了个_T,这是因为本工程创建的时候用的是默认的Unicode字符集(详见Step1中第二幅图“应用程序类型”向导对话框),而如果“完成”前不加_T就是ASCII字符串。_T实际上是一个宏,工程的字符集选择为Unicode时字符串就转为Unicode字符串,选择为Muli-Byte时就转为ASCII字符串。我们可以在“解决方案管理器”的Addition根节点上单击右键,在右键菜单上选择“属性”,弹出工程的属性对话框,常规->右侧列表中的“项目默认值(Character Set)”就显示选择的字符集。
同理,在“加数页”对话框中添加一个静态文本框“Static Text”,其Caption属性改为“请继续输入double型加数”,在“计算页”对话框中添加一个静态文本框“Static Text”,其Caption属性改为“最后请按下“计算”按钮”,ID均默认。
(2)创建属性表类
在“解决方案资源管理器(Solution Explorer)”视图中的根节点“Addition”上单击右键,在右键菜单中选择“添加(Add)”->“类(Class)”,弹出“添加类”对话框,然后在中间区域中选择“MFC 类”,点“添加”按钮,弹出另一个类向导对话框,设置“类名(Class name)”为CAddSheet,“基类(Base class)”选择“CPropertySheet”,单击“完成”。
在新生成的AddSheet.h中包含三个属性页类的头文件:
,#include “SummandPage.h”
,#include “AddendPage.h”
,#include “AddPage.h”
并在AddSheet.h中添加private变量:
private:
CSummandPage m_summandPage;
CAddendPage m_addendPage;
CAddPage m_addPage;
这里写图片描述
这里写图片描述
在AddSheet.cpp文件中修改CAddSheet的两个构造函数:
①在CAddSheet::CAddSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)函数体中添加如下代码:
//——-添加的代码———-
// 添加三个属性页到属性表
AddPage(&m_summandPage);
AddPage(&m_addendPage);
AddPage(&m_addPage);
//—————————
②在CAddSheet::CAddSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)函数体中添加如下代码:
//——-添加的代码———-
// 添加三个属性页到属性表
AddPage(&m_summandPage);
AddPage(&m_addendPage);
AddPage(&m_addPage);
//—————————
这里写图片描述
(3)显示向导对话框
①在Addition对话框上添加一个按钮,功能是当单击它时就打开向导对话框。将此按钮的ID设为IDC_INSTRUCT_BUTTON,Caption属性设为“使用说明”。
这里写图片描述
②双击该按钮进入AdditionDlg.cpp,在该文件中包含CAddSheet的头文件:#include “AddSheet.h”
③添加如下代码到OnBnClickedInstructButton函数体中:
//———添加的代码———-
// 创建属性表对象
CAddSheet sheet(_T(“”));
// 设置属性对话框为向导对话框
sheet.SetWizardMode();
// 打开模态向导对话框
sheet.DoModal();
//—————————–
这里写图片描述
至此,简单加法计算器“Addition”程序以及界面已经编辑设计完毕,运行该程序,出现以下对话框:
这里写图片描述
单击“使用说明”,出现如下对话框:
这里写图片描述
单击“下一步”,出现如下对话框:
这里写图片描述
单击“下一步”,出现如下对话框:
这里写图片描述
单击“完成”,退出向导。在“被加数”、“加数”编辑框中分别输入“1”、“2”,单击“计算”按钮,出现如下提示框:
这里写图片描述
单击“确定”,显示运算结果:
这里写图片描述
单击“退出”,界面消失。

注意事项:对话框本身的属性(在对话框空白处单击右键->属性,右侧出现的页面就是对话框本身的属性)ID一般是IDD打头,可不改,改的目的是为了方便识别。对话框中控件(如静态文本框,编辑框,按钮等)的属性ID一般是IDC打头,同样也可以不改,改的目的是为了识别其功能。改ID的原则是:头不变,在后面根据功能命名,以类型结尾(如是按钮控件则ID以BUTTON结尾,是静态文本框以STATIC结尾)

  • 18
    点赞
  • 45
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 3

打赏作者

gfy571127

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值