MFC计算器按钮代码怎么写,比如我按了按钮数字键1,那怎么把它显示在编辑框你输入的是1,还有加减乘除

MFC计算器按钮代码怎么写,比如我按了按钮数字键1,那怎么把它显示在编辑框你输入的是1,还有加减乘除,第1张

。我这是抛砖引玉,很多功能没有,请大家不要见怪。言归正传,教程开始!

第一章 界面

打开VS2012(什么版本无所谓,思路都一样),新建一个MFC应用程序,输入工程名,选择保存辩渣目录,点击确定。注意,工程名字不要带中文字符,即使VS识别,这是一个良好的习惯。如图1.1

图1.1

点击确定后,出现MFC应用程序向导,第一页是概述,显示当前默认的要建立的应用程序设置,这里如果是基于对话框的应用程序,就可以直接点击完成了,不过还是建议大家一步一步的自己设置。如图1.2

图1.2

点击下一步,是设置应用程序类型的,是单文档(SDI),多文档(MDI),还是基于对话框的。那么什么是单文档程序呢?简单的说就是只能同时打开一个的程序,比如我们的记事本程序,打开第二个的时候第一个会被关闭。什么是多文档程序呢?就是可以同时打开多个的程序(可多开),一般还可以同时处理多个文件,比如我们Word,浏览器等等。对话框程序呢?就是对话框程序啦,通常没有菜单和工具条,只有按钮等等控件,比如我们的携困悄Windows计算器。我们今天要做的计算器也是基于对话框的。选择好之后,点击下一步。如图1.3

图1.3

从上一步来到这里,此处是设置应用程序界面功能的,包括对话框标题,有无最大化,最小化按钮,程序运行是最大化显示还是最小化显示等等。设尺兄置好后点击下一步。如图1.4

图1.4

好了,直到上一步完成,就可以直接点击完成了。然后,按照我的样式或者自定义一个布局安放按钮和编辑框吧!如图1.5

图1.5

先忽略按钮禁用的问题,那是后期代码搞定的问题了。

有没有遇到问题呢?比如你的编辑框不能出滚动条?这个问题要设置编辑框的属性。我们要设置编辑框自动换行,并且垂直和水平滚动条都设为TRUE。注意,如果Multiline的值不是TRUE的话,两个滚动条不可设为TRUE。如图1.6

图1.6

第二章 实现代码

好了,界面已经完成,现在就是我们实现具体功能的时候了。首先是数字按键和运算符按键的实现。在资源编辑器下双击按钮VS会自动为这个按钮添加事件。如图2.1

图2.1

双击之后会跳到代码实现的cpp文件中,我们在这里写代码。那么数字按键和运算符按键都是怎么实现呢?没错,字符串追加!这里对编辑框内的字符串追加一个字符有两种方法,一种是为编辑框添加变量,一种是直接追加。这里为了教学,我都实现了下。

编辑框变量追加法:

在资源编辑器中,在欲添加变量的控件(这里是我们的编辑框,其他的控件一样的方法)上右击,选择添加变量选项。如图2.2

图2.2

然后在添加变量向导中输入变量名,这里我用的Result。如图2.3

图2.3

好了,假设你的按钮0是第21个,ID是IDC_BUTTON21,那么你双击它之后产生的响应函数应该是 void CCalcDlg::OnBnClickedButton21()。

具体代码:

void CCalcDlg::OnBnClickedButton21()

{

//按键0

UpdateData(TRUE)          //把编辑框显示的字符串传给相应的变量Result

Result+="0"                //在按下数字键的情况下,则在Result后加"0"

UpdateData(FALSE)         //把Result的值传给编辑框显示。

}

好了,写完代码马上运行下,看看是不是每按一次按钮编辑框就多显示一个字符呢?其他按钮也一样的实现方法。

直接追加法:

直接追加法没有那么多事要做了,直接写代码就OK了,只是比上一种方法不易理解。

代码如下:

void CCalcDlg::OnBnClickedButton19()

{

CString str=L"2"    //要追加的字符

CEdit *p=(CEdit*)GetDlgItem(IDC_EDIT1) //对编辑框1追加

int Len=p->SendMessage(WM_GETTEXTLENGTH)//获取长度

p->SetSel(Len,Len)

p->ReplaceSel(str)//追加

}

好了,以上两种方法任选一种即可。把所有的按钮(当然不包括运算作用的“=”等等了)都这样处理,并且测试成功之后再继续进行。

接下来,就是关键的计算了。这里大家可以用很多方法,比如用数据结构的栈和二叉树,或者自己写计算算法。我数据结构太糟了,只能去看人家写的代码了~~~

首先,按钮的禁用问题我们没解决呢!进制转换的问题也是大问题。我们的进制是用复选框控件实现的。为复选框添加事件,写入代码:

GetDlgItem(IDC_BUTTON28)->EnableWindow(1)。

这句的意思是当复选框被选择是按钮28是可用状态。如果EnableWindow(0)就是不可用状态。大家自己根据自己的按钮顺序自己复制代码吧。比如我的是这样的:

除了0和1外都不能使用。

已经发送请查收 , 如果觉得不合适,boost有这方面的数念渗实现,下面是我写的例子,你也可以参考

// MatrixSample.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <time.h>

#include <iostream>

#include <boost/numeric/ublas/matrix.hpp>

#include <boost/numeric/ublas/io.hpp>

#define UB boost::numeric::ublas

template<typename _Matrix>

void initMatrix(_Matrix&mtVal)

{

time_t nTimetime(&nTime) srand((unsigned int)nTime)

/// 赋值,size1是行,size2是列.

for (int i = 0i <mtVal.size1 ()++ i)

{

for (int j = 0j <mtVal.size2 ()++ j)

{

mtVal(i, j) = i * j

}

}

}

int _tmain(int argc, _TCHAR* argv[])

{

/// 定义一个3x3的矩阵double是元素的类型,也可以是int.

UB::matrix<double> mtVal(3, 3)

initMatrix(mtVal)

/// 直接输出矩阵即可,因为矩阵的IO已经提供了串流的重载.

std::cout <<"我的第一个矩阵: " <<mtVal <<std::endl

/// Ok 我们来试试矩阵的运算.

{

UB::matrix<double>mtLeft(4, 3), mtRight(3, 4)

initMatrix(mtLeft)

initMatrix(mtRight)

///高薯 矩薯脊阵相乘,产生一个4x4的矩阵.

UB::matrix<double>mtProdRes = UB::prod(mtLeft, mtRight)

std::cout <<"矩阵相乘结果: " <<UB::prod(mtLeft, mtRight) <<std::endl

}

{

UB::matrix<double>mtLeft(3, 3), mtRight(3, 3)

initMatrix(mtLeft)

initMatrix(mtRight)

/// 矩阵相加(矩阵的尺寸必须一样,否则断言激活).

UB::matrix<double>mtPlusRes = mtLeft + mtRight

std::cout <<"矩阵相加结果: " <<mtPlusRes <<std::endl

}

{

UB::matrix<double>mtLeft(3, 3), mtRight(3, 3)

initMatrix(mtLeft)

initMatrix(mtRight)

/// 矩阵相加(矩阵的尺寸必须一样,否则断言激活).

UB::matrix<double>mtMinusRes = mtLeft - mtRight

std::cout <<"矩阵相减结果: " <<mtMinusRes <<std::endl

}

return 0

}

http://jingyan.baidu.com/article/4f34706ecf3c64e387b56d8e.html

1

首先,点击VS2012,启动VS软件,然后建立如下图所示的应用程序,在图的下面输入项目名

2

建立基于对话框的标准程序,如下图所示,其余设置采用系统设置,点击完成

3

如下图,软件会生成下面的对话框,还有相应的库,代码,资源文件等

4

对上面的对话框进行编辑,如下图中所示,最后编辑的样子如下,其中1,缺漏滚5,6是Edit 控件,2,7是静态控件,伏余3是buttion,4是取消按钮改了个名字,将各个控搜高件按下图排好,并改好名字,其余部分采用软件默认

5

对1,5,7控件添加变量,对控件右击,选择如下

6

如下图变量添加向导,1选择Value,2选择Double (方便计算小数)3,是变量名,我们选择a,相同的方式,对上图中的1,5,7分别添加变量,分别为工a,b,sum

7

添加完后在对话框上双击计算按钮,就会生成相应的消息映射,进入如下代码中,见下图

8

在这个函数中添加下面代码,UpdataDate()函数中参数true表示从控件变量中获取数值,false相反

sum=a+b,就是我们先在控件中添加的三个变量,此处所做的计算器只是用来做个加法

9

添加完上述代码后,编译成功如下所示

10

ctrl+f5运行如下图

11

输入数值进行加法计算,你可以进行其它的相关扩展,比如减法,乘法等,都是相同的方法


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12518856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存