您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页VC++计算器设计与实现文档

VC++计算器设计与实现文档

来源:步遥情感网
VC++环境下计算器程序设计与实现

设计目标:在VC++环境下可视化编程实现简单计算器的实现。目标是有数字按钮,加减乘除符号按钮,清除按钮,两个输入框用来输入用算数字,一个输出框用来显示输出结果。 设计过程:

第一步 页面设计部分与控件添加部分

首先打开VC,选择MFC AppWizard[exe],设定好路径和工程名(这里我设置工程名为为“计算器”)。在创建向导步骤1的时候,选择“基本对话框”。创建完成后,把当前页面上原配的控件按Delete全部清除,接着按照MFC自带的控件选项进行本次计算器的控件添加,在原先清空的界面中依次用控件工具框中的相应工具,画出基本的计算器界面(如下图)。

每个控件“属性”都有属于它自己的ID,默认的按钮按键为IDC_BUTTON0,对控件数字按钮和符号按钮的ID不进行修改,把按钮的标题改成相应的数字和运算符号。编辑框的ID选择默认ID不做修改, 完成修改后,就需给控件添加消息响应了,基本操作可以是直接双击控件,便会有向导提示。MFC默认下了的响应信息都为On_开头,这个步骤一般不对成员函数名称做任何修改,直接点击OK即可。

之后就会跳转到具体的代码实现过程,这里我们依次给每一个控件添加消息响应函数:

void CMyDlg::OnButton1() { }

void CMyDlg::OnButton3() { }

// TODO: Add your control notification handler code here // TODO: Add your control notification handler code here

其他的控件和上面的类似。

到此为止,基本上完成了计算器页面的前半部分预备工作,下来是对控件具体实现代码的添加。在开始第二步之前有一项工作时必须要做的,那便是添加3个成员变量和一个CEdit类的变量。

具体添加方法,就是右键主对话框CMyDlg,选择Add Member Variable。也可以是在菜单栏中选择“查看”,“建立类向导”如下图所示。这里把3个编辑框控件内的变量都改变为double型。之后再在控件IDC_EDIT3中选择\"Add Variable\并且数据类型选择 Control类型,此时变量自动改为了CEdit类,这步的意思是把编辑框控件3设置为CEdit类,并且设置一个成员对象是m_CResult。

第二步 控件消息响应函数具体代码添加部分

从加法开始,其代码如下:

void CMyDlg::OnButton11() { }

// TODO: Add your control notification handler code here double n_result;

n_result=m_num1+m_num2; m_num3=n_result; char sz[20];

sprintf(sz,\"%f\m_CResult.SetWindowText(sz); UpdateData();

其中UpdateData() 是MFC的窗口函数,用来刷新数据的。 m_CResult.SetWindowText(sz);此句是把结果输出在之前用CEdit类创建的对象m_CResult,m_CResult调用SetWindowText(sz);把结果显示在编辑框中。

剩下的减法 乘法 和除法 也是大同小异(只是把符号改一下)。 由于我预设了2个编辑框所想实现的功能是,如在编辑框1内输入一个输入30,然后再编辑框2内输入另一个数字20,并且再进行运算。问题是,如何用判断用户是在哪个编辑框上输入了数字,所以我需要给程序加入一个功能,那便是判断用户是在编辑框1输入,还是编辑框2内输入。可以加入一个鼠标左键点击WM_LBUTTONDOWN消息和一个EN_SETFOCUS事件来响应这个鼠标消息,

EN_SETFOCUS为判断焦点事件。用户用鼠标选择并点击编辑框的时候,用WM_LBUTTONDOWN消息去响应,然后与此同此,把响应的和EN_SETFOCUS联系起来,预设一个全局变量nEditFlag ,作为在EN_SETFOCUS函数里的一个标记,并在鼠标点下的时候用nEditFlag 去表示编辑框目前被选定的状态,nEditFlag ==1 的时候我们就判断用户选择了编辑框1,再者当nEditFlag ==2的时候说明编辑框2被选定。 如何添加事件EN_SETFOCUS,由于EN_SETFOCUS是一个判断焦点的,所以对象应该是编辑框1和编辑框2里添加,所以我们回到对话框编辑页面。

“右键编辑框1”,点击“事件”,“选择EN_SETFOCUS”(这里程序默认的响应函数是OnsetfocusEdit1)

依次类推也给编辑框2添加事件响应函数OnsetfocusEdit2,方法同上。如下图:

设置好之后,还要做一些初始化工作,在程序运行之初,先初始化nEditFlag = 0;在OnInitDialog()内进行初始化,只需在OnInitDialog()函数中加入一句nEditFlag = 0;就可以了。之后再为两个事件响应函数进行OnsetfocusEdit1()和OnsetfocusEdit2()添加代码如下:

void CMyDlg::OnSetfocusEdit1() { }

void CMyDlg::OnSetfocusEdit2() { }

nEditFlag=2;

// TODO: Add your control notification handler code here

nEditFlag=1;

// TODO: Add your control notification handler code here

当用户选定编辑框1的时候,nEditFlag = 1; 当用户选定编辑框2的时候,nEditFlag = 2; 鼠标消息WM_LBUTTONDOWN具体代码如下

void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default this->SetFocus(); nEditFlag=0; CDialog::OnLButtonDown(nFlags, point); }

第三步 按键0-9的响应部分

由于代码都大同小异,所以就用数字按钮1,2来进行说明

void CMyDlg::OnButton1() {

// TODO: Add your control notification handler code here UpdateData(TRUE); if(nEditFlag==1) { }

else if(nEditFlag==2) {

m_num1=m_num1*10+1;

m_num2=m_num2*10+1;

}

UpdateData(FALSE); }

void CMyDlg::OnButton2() {

// TODO: Add your control notification handler code here UpdateData(TRUE); if(nEditFlag==1) { }

else if(nEditFlag==2) {

m_num1=m_num1*10+2;

m_num2=m_num2*10+2;

}

UpdateData(FALSE); }

用if语句去判断标记常量nEditFlag,从而给判断是m_num1还是m_num2进行操作。 这里

m_num1是编辑框1内的数字 m_num2是编辑框2内的数字

(说明:清除的功能就是计算完成后清除编辑框内的数字,该功能暂时还没有实现。)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务