2012-11-17 12:28 用MFC实现的计算器(详细版)
这篇文章里通过计算器的简单实现,让大家能够了解一般对话框应用程序开发的基本流程
要求:编写简单的计算器应用程序,要求利用按钮进行加、减、乘,除操作,在对话框输出计算机结果。
下面结合操作步骤,讲解对话框应用程序开发的基本流程:
(1)、在对话框资源上添加按钮和编辑框控件,并设置按钮控件和编辑框控件的标题和ID,并且
将编辑框设置为只读属性。最终的运行结果如下图。

(2)、添加单机数字按钮和加、减、乘、除按钮,及单机“等号”按钮的消息响应函数
(3)、添加消息响应函数的函数体。
(4)、程序调试无错误后,进行测试,分析测试结果。保证程序的正确性。
下面分析本程序的代码:
1、新建一个对话框应用程序Test,采用默认设置;
2、在类CTestDlg中添加数据成员:
CString num1; //数值计算符号前面的数值
CString num2; //数值计算后面的数值
BOOL isresult; //是否按下加、减、乘、除符号
int witch; //是加、减、乘、除哪种计算
3、在CTestDlg::OnInitDialog()函数中对相关变量进行初始化
num1=""; //第一个数据
num2=""; //第二个数据
isresult=FALSE; //保存是否点击了运算按钮
witch=0; //保存运算按钮
4、然后是按钮的响应的函数,下面对同一类的按钮响应函数只列出了一个,其他的都是一样的
void CGeliangDlg::OnN1() //单击“1”按钮
{
// TODO: Add your control notification handler code here
if(isresult==FALSE)
{
num1+="1";
m_result=num1;
UpdateData(false);
}
if(isresult==TRUE)
{
num2+="1";
m_result=num2;
UpdateData(false);
}
}
void CGeliangDlg::OnN10() //单击“+\-按钮”
{
// TODO: Add your control notification handler code here
CString m_m="-";
if(isresult==FALSE)
{
m_m+=num1;
m_result=m_m;
UpdateData(false);
}
if(isresult==TRUE)
{
m_m+=num2;
m_result=m_m;
UpdateData(false);
}
}
void CGeliangDlg::OnN11() //单击“.”按钮
{
// TODO: Add your control notification handler code here
if(isresult==FALSE)
{
num1+=".";
m_result=num1;
UpdateData(false);
}
if(isresult==TRUE)
{
num2+=".";
m_result=num2;
UpdateData(false);
}
}
void CGeliangDlg::OnJia() //单击“+”按钮
{
// TODO: Add your control notification handler code here
isresult=TRUE;
witch=1;
}
void CGeliangDlg::OnResult() //单击“=”按钮
{
// TODO: Add your control notification handler code here
double number1=atof(num1);
double number2=atof(num2);
double result=0.0;
switch(witch)
{
case 1:result=number1+number2;break;
case 2:result=number1-number2;break;
case 3:result=number1*number2;break;
case 4:result=number1/number2;break;
default:AfxMessageBox("程序运行错误");break;
}
m_result="";
m_result.Format("%f",result);
UpdateData(false);
}
上面的程序代码中,仅给出数字按钮,符号按钮和“+/-”按钮,及“.”按钮,的响应函数。数字键按钮的代码是基本类似的
,符号按钮的代码也是类似的,读者可以自己写出其他按钮的消息映射,然后编写函数代码。
2012-11-17 12:28 用MFC实现的计算器(详细版)的更多相关文章
- 基于dsp_builder的算法在FPGA上的实现(转自https://www.cnblogs.com/sunev/archive/2012/11/17/2774836.html)
一.摘要 结合dsp_builder.matlab.modelsim和quartus ii等软件完成算法的FPGA实现. 二.实验平台 硬件平台:DIY_DE2 软件平台:quartus ii9.0 ...
- string源码分析 ——转载 http://blogs.360.cn/360cloud/2012/11/26/linux-gcc-stl-string-in-depth/
1. 问题提出 最近在我们的项目当中,出现了两次与使用string相关的问题. 1.1. 问题1:新代码引入的Bug 前一段时间有一个老项目来一个新需求,我们新增了一些代码逻辑来处理这个新需求.测试阶 ...
- 总结近期CNN模型的发展(一)---- ResNet [1, 2] Wide ResNet [3] ResNeXt [4] DenseNet [5] DPNet [9] NASNet [10] SENet [11] Capsules [12]
总结近期CNN模型的发展(一) from:https://zhuanlan.zhihu.com/p/30746099 余俊 计算机视觉及深度学习 1.前言 好久没有更新专栏了,最近因为项目的原因接 ...
- Java编程思想(11~17)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...
- .NET Conf 2020大会将于2020年11月10日--- 11月12日举行 (UTC)时区
.NET Conf 2020大会将于2020年11月10日--- 11月12日举行 (UTC)时区 开始时间 2020年11月10日 08:00 (PT) | 16:00 (UTC)| 24:00(北 ...
- [CareerCup] 17.12 Sum to Specific Value 和为特定数
17.12 Design an algorithm to find all pairs of integers within an array which sum to a specified val ...
- [团队项目]第二个冲刺 看板和燃尽图 Sprint2 6.8/6.9/6.10/6.11/6.12/6.13/6.14
1.开始一个新的冲刺: 起止:2016.6.1~2016.6.14 按照以下过程进行 ProductBacklog:继续向下细化 Sprint 计划会议:确定此次冲刺要完成的目标 Sprint Bac ...
- 2016年11月12日 星期六 --出埃及记 Exodus 20:3
2016年11月12日 星期六 --出埃及记 Exodus 20:3 "You shall have no other gods before me.除了我以外,你不可有别的 神.
- careercup-中等难度 17.12
17.12 设计一个算法,找出数组中两数之和为指定值的所有整数对. 解答 时间复杂度O(n)的解法 我们可以用一个哈希表或数组或bitmap(后两者要求数组中的整数非负)来保存sum-x的值, 这样我 ...
随机推荐
- window下面配置sftp
Windows 下 搭建 基于 ssh 的sftp 服务器,服务器端可以用 freesshd,F-secure server 等,filezilla server不可用,之前傻乎乎的用filezi ...
- 2.1 Word 插入 smartart、图表
1.插入-smartart 2.插入后的图表中,左边可键入文字 3.按住TAB可以往后缩进 选中目标按住shift+TAB 可以往前缩进. 1.插入-图表 2.选择形状 3.会成功插入对比图表 以及出 ...
- @property (nonatomic, getter = isExpanded) BOOL expanded;
如果这个property是 BOOL on, 那么Objc默认创建的 setter 为: - (void)on:(BOOL)setOn { } getter 为: - (BOOL)on { retur ...
- ionic 进入多级目录以后隐藏底部导航栏(tabs)(完美解决方案)
公司开始使用ionic开发项目,在此记录下把遇到的问题,网上有大牛已经把解决方法整出来了,不过记录在自己这里方便查阅. 这篇记录在有tabs的项目里,进入子层级时,底部导航还一直存在,本人是要让他只在 ...
- 通过mvn archetype:generate创建Maven项目模板慢的问题
通过mvn archetype:generate这种交互方式来创建Maven项目模板的时候,经常会长时间卡在Generating project in Interactive mode这一行提示(图1 ...
- 【原创】对Java的synchronized关键字的学习
在Java中,每一个线程都有一个内部锁.当我们使用synchronized关键字时,就是利用这个内部锁来实现线程对某个对象的锁定控制. 那么,如果某个对象中有两个方法,方法一和方法二都使用了synch ...
- ExtJS从入门到后面肯定要抛弃
一.ExtJs定义 ①基于JavaScript语言 ②基于JavaSwing的MVC架构 ③支持组件化.模块化设计 ④提供“本地数据源”的支持 ⑤完完善与服务端的交互机制 ⑥是最有可能拥有大规模可视化 ...
- openstack私有云布署实践【16.1 CentOS7.1 只有根分区镜像制作】
之所以要只有根分区镜像,是因为在创建VM或者调整云主机的硬盘大小时,它能自动扩容.无需人工介入 在原来的物理机10.40.41.1的CentOS 6.7上制作镜像.(当然如果你的制作镜像的宿主机是 ...
- mybatis 主键UUID生成策略
<insert id="insert" parameterType="com.lsfwpt.lawmis.po.SysUser"> <sele ...
- c# 方法重载
在c#中同样的方法名称不一样的参数数量和类型可以实现方法重载 class ResultDisplayer{void DisplayResult(string result){// implementa ...