mfc入门程序之简单的计算器

本文将以一名小白视角来叙述一个mfc应用“计算器”的设计过程,作品实现了加、减、乘、除,鼠标点击按钮输入和键盘输入,功能虽然简单但是这个程序帮助我初步的认识了mfc的“世界观”。(下图是软件界面。)

1.创建一个mfc应用程序;

选择mfc应用程序,给工程取个名

选择基于对话框,这样看起来会简单一点

2.布局控件

进入项目后会自动切换到这个界面,这个界面是编辑基础对话框的,计算器应用也是基于这个对话框开发,稍后需要布局我们自己的控件,因此把框中所有的默认控件删掉

按需布置控件,(注意!!为了美观,在你布局好之前不要双击任何控件)控件在右上角的工具箱里面,直接拖进来就好了,一个一个的拖(因为我还不懂一下子布置很多控件,以后学习了再与大家分享),这里用到的两个编辑框是Edit Control,和19个按钮Button。

3.数字按钮控件配置

我们单击按钮,右键点属性,会出现属性页,在Caption设置按钮显示的文本,然后Horizontal选择文本位置居中(Center),一个个的把所有按钮做成计算器该有的样子

依次(Button1到Button19)双击控件按钮和两个编辑框,会在“计算器Dlg.cpp”生成代码 ,到时候控件响应事件就是在这里做的(推荐将除了数字以外的按钮的ID改成英文来区别,如乘法:ButtonMut)


右键第一个编辑框选择添加变量,添加一个value的CString类型的变量mStr,这个变量绑定了编辑框1,我们就通过操作这个变量来实现按钮响应的可视化,就是说输入哪一个数字都会显示在第一个编辑框内。

进入计算器Dlg.cpp(你自己的工程叫XXX就是XXXDlg.cpp),为按钮添加响应事件,代码如下。

void C计算器Dlg::OnBnClickedButton9()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);   //刷新应用状态mStr=L"1";           //字符前加L是把字符转换成Unicode型,将案件内容显示在编辑框UpdateData(FALSE);//这个是和上面配合使用的
}

添加完后就可以调试运行一下了,写程序我们要学会调试,调试的过程中寻求反馈,菜鸟程序员不要一码到底不然很容易对编程失去兴趣。(毛主席说过,越是困难的时候越是要看到光明,大概就是这个意思吧)
你可以直接点击调试的绿色箭头
亦可以点击生成—>生成解决方案编译一下再点击绿色的箭头,因为我用的是vs2010,我的vs他程序运行错误的话会自动运行上一次成功的结果,我得不到错误的反馈,应该有设置解决这一问题,但是我习惯了先编译一下(所以我推荐你们也用这种方法)。

OK,按钮“1”成功响应事件,将“1”显示在第一个编辑框上,因此我们接下来将其他同类型的按钮也添加响应事件,包括Button
2-Button11如下面代码所示:(建议自己敲

void C计算器Dlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"1";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton2()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"2";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton3()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"3";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton4()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"4";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton5()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"5";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton6()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"6";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton7()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"7";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton8()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"8";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton9()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"9";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton10()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L"0";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}void C计算器Dlg::OnBnClickedButton11()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//刷新应用状态mStr=L".";//字符前加L是把字符转换成Unicode型UpdateData(FALSE);
}

4.算法配置(这个程序的核心)

差点忘了,还有第二个edit,我们需要右键添加变量,给他绑定一个private的vlaue的double的mResult,这个是用来接收结果的,因此第二个编辑框也就是用来显示结果的。

我们要在"计算器Dlg.h"(XXXDlg.h)里面添加一些变量和函数,代码如下:

/*这两个函数都要在“计算器Dlg.cpp”里面重写*/void SaveFirstValue();//这个是用来保存一个输入完成的值的。void Calculator();    //这个是用来实现计算的,private:double mNum1;//第一个值double mNum2;//第二个值int mFlag;  //传递运算符,来触发switch中的事件CString mStr;//这个是edit1绑定的值,字符串类型,不用自己手动定义double mResult;//这个是edit2绑定的值,double型,不用手动定义

转到“计算器Dlg.cpp”重写上面两个关键函数,在程序末尾写:

void C计算器Dlg::SaveFirstValue ()
{UpdateData(TRUE);mNum1=_wtof(mStr);       //"_wtof"可以将Cstring转换成d0ublemStr=L"";              //L将编码格式转成UnicodeUpdateData(FALSE);
}void C计算器Dlg::Calculator ()
{UpdateData(TRUE);
mNum2=_wtof(mStr);
switch(mFlag)       //接收按键传过来的mFlag的值,以此来判断是什么运算符
{case 1:mResult=mNum1+mNum2;break;
case 2:mResult=mNum1+mNum2;break;
case 3:mResult=mNum1+mNum2;break;
case 4:mResult=mNum1+mNum2;break;
}
UpdateData(FALSE);
}```cpp```cpp```cpp

同样是在“计算器Dlg.cpp”下一步将添加运算符响应事件,添加在数字按钮后最好:(顺序为等于、加、减、乘、除):

void C计算器Dlg::OnBnClickedButton12()
{// TODO: 在此添加控件通知处理程序代码Calculator();       //等于号的功能
}void C计算器Dlg::OnBnClickedButton13()
{// TODO: 在此添加控件通知处理程序代码SaveFirstValue();mFlag=1;      //加法的功能![](https://img-blog.csdnimg.cn/20210310144252389.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpYW5MaWFuZ2NoZWVzZQ==,size_16,color_FFFFFF,t_70)}void C计算器Dlg::OnBnClickedButton14()
{// TODO: 在此添加控件通知处理程序代码SaveFirstValue();mFlag=2;      //减法的功能
}void C计算器Dlg::OnBnClickedButton15()
{SaveFirstValue();  mFlag=3;   //乘法的功能
}void C计算器Dlg::OnBnClickedButton16()
{SaveFirstValue();mFlag=4;     //除法的功能
}

好了,在生成编译一下,没有错误就可以运行了,这个时候的计算器已经可以实现四则运算了。

5.添加"清除"、“删除”、“退出”

还是在“计算器Dlg.cpp”


/*清除键,归零键*/
void C计算器Dlg::OnBnClickedButton17()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);mStr=L"0";//字符串前+L就是把数据转换成Unicode格式mResult=0.0;mNum1=0.0f;mNum2=0.0f;UpdateData(FALSE);}
/*删除右边一个数字*/
void C计算器Dlg::OnBnClickedButton18()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);       //将数据更新到控件if(!mStr.IsEmpty ()){mStr=mStr.Left (mStr.GetLength ()-1);       //减掉右边的一位}UpdateData(FALSE);            //将数据更新到控件
}
/*退出软件*/
void C计算器Dlg::OnBnClickedButton19()
{// TODO: 在此添加控件通知处理程序代码exit(0);//大家应该都认识}

6.支持键盘操作

描述:可以通过小键盘来用计算器,按回车键计算结果,按Backspace删除最后一位数字。

右键单击对话框,选择添加“类向导”,选择“虚函数”,选择下面这个函数,双击它,应用。

然后返回到“计算器Dlg.cpp”找到刚刚添加的类,在里面添加键盘按键响应事件。

BOOL C计算器Dlg::PreTranslateMessage(MSG* pMsg)
{// TODO: 在此添加专用代码和/或调用基类if(pMsg->message==WM_KEYDOWN){if(pMsg->wParam==VK_RETURN)//回车键{Calculator();}if(pMsg->wParam==VK_BACK  )//删除键{C计算器Dlg::OnBnClickedButton18() ;}if(pMsg->wParam==VK_ADD  )//加法键{C计算器Dlg::OnBnClickedButton13();}if(pMsg->wParam==VK_SUBTRACT  )//减法键{C计算器Dlg::OnBnClickedButton14();}if(pMsg->wParam==VK_MULTIPLY  )//乘法键{C计算器Dlg::OnBnClickedButton15();}if(pMsg->wParam==VK_DIVIDE )//除法键{C计算器Dlg::OnBnClickedButton16();}}if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) return TRUE;//屏蔽esc键if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) return TRUE;//屏蔽回车键,让他不再退出elsereturn CDialogEx::PreTranslateMessage(pMsg);
}

在属性页将edit1设置成只能输入数字


将edit2设置成只读

运行成功!你可以在工程文件的Debug目录下找到“.exe”文件。

这是我第一个完整做出来的mfc应用程序,期间我大部分参考了https://blog.csdn.net/qq_36079638/article/details/83591039这一篇博客写的挺好。
虽然网上大多劝退mfc的,但是入职的公司要求会mfc也没办法呀,建议初学者要有C++基础(虚函数、多态、类和对象、继承封装、this指针需要懂的),如果要买书的话,极力推荐一本我正在看的侯俊杰《深入浅出MFC》
随后我会将工程上传。
这是我的第一篇博客。
祝诸君身体健康工作顺利!

mfc入门程序之简单的计算器相关推荐

  1. 编写java程序模拟简单的计算器

    /*** 编写java程序模拟简单的计算器* 定义名为Number的类其中有两个整型数据成员变量n1和n2应该声明为私有* 编写构造方法赋予n1和n2初始值* 再为该类定义加addition().减s ...

  2. MFC系列 - 第一个MFC入门程序

    MFC,多年开发和教学,这门课程,新课改决定将它砍掉,Qt也是我们的趋势,同时在我的Qt系列中详细讲解了Qt的系列教学.MFC虽然很古老,但是还是得佩服微软搞得这套框架,让一代又一代Windows程序 ...

  3. c语言入门程序下载,简单实用——C语言入门程序练习

    #include #include struct structstudent//创建结构体,表示学生信息 { int No;//学号 char Name[20];//姓名 int Age;//年龄 } ...

  4. 微信小程序实现简单的计算器功能

    wxml <view class='content'><input value='{{calculation}}'></input><view class=' ...

  5. 【吕鑫MFC学习】一个简单的MFC程序

    开始学习MFC的第一天,实现一个简单的整数计算器用来说明MFC程序的基本流程. 平台:Visual Studio2015 实现的界面: 首先,新建一个MFC应用程序 这里简单说明控制台应用程序.MFC ...

  6. MFC入门(一)-- 第一个简单的windows图形化界面小程序(打开计算器,记事本,查IP)

    /序 大约三年前,学过一些简单的编程语言之后其实一直挺苦恼于所写的程序总是拘泥于用的编译器,脱离了编译环境基本没运行的可行性,故而写一个在任意windows电脑下都能运行的小软件便成为了一块心病. 大 ...

  7. VS2010/MFC编程入门之四(MFC应用程序框架分析)

    上一讲鸡啄米讲的是VS2010应用程序工程中文件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大.这一节鸡啄米就为大家分析下MFC应用程序框架的运行 ...

  8. (转载)VS2010/MFC编程入门之四(MFC应用程序框架分析)

    上一讲鸡啄米讲的是VS2010应用程序工程中文件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大.这一节鸡啄米就为大家分析下MFC应用程序框架的运行 ...

  9. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  10. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

最新文章

  1. 在git下搭建个人博客
  2. jQuery选择器介绍:基本选择器、层次选择器、过滤选择器、表单选择器
  3. 2019 序列号_抖音发布2019年度报告;苹果序列号;熊猫互娱进入破产程序
  4. 深入理解缓存系统|单机QPS突破千万优化之路
  5. P2680 运输计划(树上差分+lca+二分)
  6. 线段树-Pudding Monster CF526F-单调栈
  7. simuvex 符号分析形象解释
  8. 城市发展规律及未来走向进行认知与预测的机构
  9. C++:两个数组求最值、排序、合并
  10. LeetCode-69 x的平方根
  11. linux把虚拟机上的文件共享,[转]windows中vmware虚拟机中的Linux如何进行文件的共享...
  12. 09 spring-aop
  13. [转]关于PSP的3.52 M33-2自制系统七大热点问题
  14. 帅地鸽了大半年,一个专注于面试、基础知识、算法的小破站上线了
  15. 《罗辑思维》第31期:你的女神你不懂
  16. ARouter路由解析
  17. QT各种压缩包下载地址
  18. ijkplayer源码---倍速
  19. Sql Server服务远程过程调用失败。[0x800706be]
  20. InstructPix2Pix: 随口修图

热门文章

  1. 系统背景描述_多元化多功能会议室报告厅智能控制系统方案
  2. 计算机子网掩码在线,子网掩码计算器
  3. java web程序设计答案郭克华_清华大学出版社郭克华JavaWeb程序设计上机习题答案及解析.doc...
  4. 渗透工具TotalPass:TotalPass 是一款默认口令/弱口令扫描工具
  5. 真假屏幕测试软件,如何判断4K电视真假?测试方法在这里,最简单用手机就可以...
  6. 高分辨率:遥感卫星影像
  7. 【FiddlerScript】利用FiddlerScript抓包保利威下载
  8. (追赶法求三对角矩阵、LU分解)
  9. 漫画 前端发展史的江湖恩怨情仇~
  10. (个人)AR电子书系统创新实训第三周(1)