当前位置:首页 > 代码 > 正文

mfc计算器代码(mfc计算器程序)

admin 发布:2022-12-19 05:34 100


本篇文章给大家谈谈mfc计算器代码,以及mfc计算器程序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

MFC计算器按钮代码怎么写,比如我按了按钮数字键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外都不能使用。

MFC 简单计算器代码

class CCalculatorDlg : public CDialog

{

// Construction

public:

void SaveValue1();

CCalculatorDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data

//{{AFX_DATA(CCalculatorDlg)

enum { IDD = IDD_CALCULATOR_DIALOG };

CEdit m_edit;span style="white-space:pre" /span//显示使用一个编辑框

CString m_str;span style="white-space:pre" /span//编辑框内的字符串

//输入的2个值

double m_fNumber1;

double m_fNumber2;

//保存计算符号类型 0='+',1='-',2='*',3='/'

int m_iSign;

//计算

void Calculator();

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CCalculatorDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

HICON m_hIcon;

// Generated message map functions

//{{AFX_MSG(CCalculatorDlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnMyAbout();

afx_msg void OnButtonBack();

afx_msg void OnButtonClear();

afx_msg void OnButton1();

afx_msg void OnButton2();

afx_msg void OnButton3();

afx_msg void OnButton4();

afx_msg void OnButton5();

afx_msg void OnButton6();

afx_msg void OnButton7();

afx_msg void OnButton8();

afx_msg void OnButton9();

afx_msg void OnButton0();

afx_msg void OnButtonDian();

afx_msg void OnButtonJia();

afx_msg void OnButtonJian();

afx_msg void OnButtonCheng();

afx_msg void OnButtonChu();

afx_msg void OnButtonDeng();

afx_msg void OnButtonPingFang();

afx_msg void OnButtonKaiFang();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CalculatorDlg.cpp文件中:

[cpp] view plain copy

void CCalculatorDlg::OnButtonBack()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

//移除最右边一个字符

if (!m_str.IsEmpty())

{

m_str = m_str.Left(m_str.GetLength()-1);

}

UpdateData(FALSE);

}

void CCalculatorDlg::OnButtonClear()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = "";

m_fNumber1 = 0.0f;

m_fNumber2 = 0.0f;

m_iSign = 0;

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton1()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "1";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton2()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "2";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton3()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "3";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton4()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "4";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton5()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "5";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton6()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "6";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton7()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "7";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton8()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "8";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton9()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "9";

UpdateData(FALSE);

}

void CCalculatorDlg::OnButton0()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_str = m_str + "0";

UpdateData(FALSE);

}

//小数点按钮

void CCalculatorDlg::OnButtonDian()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

//如果没有小数点,则加上一个小数点,如果已有小数点就忽略此次的小数点,保证最多只有1个

if (-1 == m_str.Find('.'))

{

m_str = m_str + ".";

}

UpdateData(FALSE);

}

void CCalculatorDlg::OnButtonJia()

{

// TODO: Add your control notification handler code here

SaveValue1();

m_iSign = 0;

}

void CCalculatorDlg::OnButtonJian()

{

// TODO: Add your control notification handler code here

SaveValue1();

m_iSign = 1;

}

void CCalculatorDlg::OnButtonCheng()

{

// TODO: Add your control notification handler code here

SaveValue1();

m_iSign = 2;

}

void CCalculatorDlg::OnButtonChu()

{

// TODO: Add your control notification handler code here

SaveValue1();

m_iSign = 3;

}

void CCalculatorDlg::OnButtonDeng()

{

// TODO: Add your control notification handler code here

Calculator();

}

void CCalculatorDlg::SaveValue1()

{

UpdateData(TRUE);

m_fNumber1 = atof(m_str);

m_str = "";

UpdateData(FALSE);

}

void CCalculatorDlg::Calculator()

{

UpdateData(TRUE);

m_fNumber2 = atof(m_str);

double f = 0.0f;

switch (m_iSign)

{

//加

case 0:

f = m_fNumber1 + m_fNumber2;

break;

//减

case 1:

f = m_fNumber1 - m_fNumber2;

break;

//乘

case 2:

f = m_fNumber1 * m_fNumber2;

break;

//除

case 3:

if (m_fNumber2 == 0.0f)

{

f = m_fNumber1;

}

else

{

f = m_fNumber1 / m_fNumber2;

}

break;

//平方

case 4:

f = m_fNumber2 * m_fNumber2;

break;

//开方

case 5:

f = sqrt(m_fNumber2);

break;

default:

break;

}

//如果浮点数其实是个整数

if(f - int(f) = 1e-5)

{

m_str.Format("%d",(int)f);

}

else

{

m_str.Format("%f",f);

}

UpdateData(FALSE);

m_fNumber1 = f;

m_fNumber2 = 0.0f;

}

void CCalculatorDlg::OnButtonPingFang()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_fNumber1 = atof(m_str);

double f = m_fNumber1 * m_fNumber1;

//如果浮点数其实是个整数

if(f - int(f) = 1e-5)

{

m_str.Format("%d",(int)f);

}

else

{

m_str.Format("%f",f);

}

UpdateData(FALSE);

m_fNumber1 = f;

m_fNumber2 = 0.0f;

m_iSign = 4;

}

void CCalculatorDlg::OnButtonKaiFang()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_fNumber1 = atof(m_str);

double f = sqrt(m_fNumber1);

//如果浮点数其实是个整数

if(f - int(f) = 1e-5)

{

m_str.Format("%d",(int)f);

}

else

{

m_str.Format("%f",f);

}

UpdateData(FALSE);

m_fNumber1 = f;

m_fNumber2 = 0.0f;

m_iSign = 5;

}

求助一个用MFC来编写的计算器程序代码

主代码如下。。这个是我自己做的。就怕你看不懂了。。。

不过敢上来问,应该是比较精通的了。。

#include

"stdafx.h"

#include

stdio.h

#include

stdlib.h

#include

windows.h

#include

windowsx.h

#include

"resource.h"

#include

"MainDlg.h"

#define

TURE

1

#define

FALSE

BOOL

WINAPI

Main_Proc(HWND

hWnd,

UINT

uMsg,

WPARAM

wParam,

LPARAM

lParam)

{

switch(uMsg)

{

HANDLE_MSG(hWnd,

WM_INITDIALOG,

Main_OnInitDialog);

HANDLE_MSG(hWnd,

WM_COMMAND,

Main_OnCommand);

HANDLE_MSG(hWnd,WM_CLOSE,

Main_OnClose);

}

return

FALSE;

}

BOOL

Main_OnInitDialog(HWND

hwnd,

HWND

hwndFocus,

LPARAM

lParam)

{

return

TRUE;

}

BOOL

IsInt(TCHAR*

str)

{

int

i=atoi(str);

TCHAR

strtemp[256];

wsprintf(strtemp,"%i",i);

if(strcmp(str,strtemp)==0)

{

return

TURE;

}

else

{

return

FALSE;

}

}

TCHAR

str1[256],str2[256],str3[256];

int

i1,i2,i3;

void

Main_OnCommand(HWND

hwnd,

int

id,

HWND

hwndCtl,

UINT

codeNotify)

{

switch(id)

{

case

IDC_OK:

{

GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));

GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));

int

i1,i2,i3;

if(!IsInt(str1))

{

MessageBox(hwnd,TEXT("第一个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

if(!IsInt(str2))

{

MessageBox(hwnd,TEXT("第二个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

i1=atoi(str1);i2=atoi(str2);i3=i1+i2;

wsprintf(str3,"%i",i3);

SetDlgItemText(hwnd,IDC_EDIT3,str3);

}

break;

case

IDC_OK2:

{

GetDlgItemText(hwnd,IDC_EDIT4,str1,sizeof(str1));

GetDlgItemText(hwnd,IDC_EDIT5,str2,sizeof(str2));

if(!IsInt(str1))

{

MessageBox(hwnd,TEXT("第一个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

if(!IsInt(str2))

{

MessageBox(hwnd,TEXT("第二个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

i1=atoi(str1);

i2=atoi(str2);

i3=i1-i2;

wsprintf(str3,"%i",i3);

SetDlgItemText(hwnd,IDC_EDIT6,str3);

}

break;

case

IDC_OK3:

{

GetDlgItemText(hwnd,IDC_EDIT7,str1,sizeof(str1));

GetDlgItemText(hwnd,IDC_EDIT8,str2,sizeof(str2));

if(!IsInt(str1))

{

MessageBox(hwnd,TEXT("第一个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

if(!IsInt(str2))

{

MessageBox(hwnd,TEXT("第二个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

i1=atoi(str1);i2=atoi(str2);

i3=i1*i2;

itoa(i3,str3,10);

SetDlgItemText(hwnd,IDC_EDIT9,str3);

}

break;

case

IDC_OK4:

{

GetDlgItemText(hwnd,IDC_EDIT10,str1,sizeof(str1));

GetDlgItemText(hwnd,IDC_EDIT11,str2,sizeof(str2));

if(!IsInt(str1))

{

MessageBox(hwnd,TEXT("第一个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

if(!IsInt(str2))

{

MessageBox(hwnd,TEXT("第二个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

i1=atoi(str1);

i2=atoi(str2);

i3=i1/i2;

itoa(i3,str3,10);

//else

str3="除不掉";这里仍然有个bug!

SetDlgItemText(hwnd,IDC_EDIT12,str3);

}

break;

case

IDC_OK5:

{

GetDlgItemText(hwnd,IDC_EDIT13,str1,sizeof(str1));

i1=atoi(str1);

itoa(i1,str2,2);

SetDlgItemText(hwnd,IDC_EDIT14,str2);

}

break;

case

IDC_OK6:

{

GetDlgItemText(hwnd,IDC_EDIT15,str1,sizeof(str1));

if(!IsInt(str1))

{

MessageBox(hwnd,TEXT("第一个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

if(!IsInt(str2))

{

MessageBox(hwnd,TEXT("第二个数不是整数!"),TEXT("错误"),MB_OK|MB_ICONERROR);

return

;

}

i1=atoi(str1);

itoa(i1,str2,16);

SetDlgItemText(hwnd,IDC_EDIT16,str2);

}

break;

default:

break;

}

}

void

Main_OnClose(HWND

hwnd)

{

EndDialog(hwnd,

0);

}

MFC编写计算器具体步骤 方法 代码,拜托高手急用!

1、首先打开VS2013,新建一个VC++ MFC项目,命名为 gongzi。

2、然后在程序类型中,选择“基于对话框”,点击“完成”按钮。

3、然后在弹出的对话框中,删除原先的Static Text,添加相应的控件到窗体上。

4、接着在应发工资编辑框右击添加变量。 变量名称是 m_editTotal, 变量类型是 double, 类别为 value,点击“完成”。同样扣税费用编辑框右击添加变量。 变量名称是 m_editTax, 变量类型是 double, 类别为 value,应扣税款标签右击添加变量。

5、然后双击“计算应扣税款”进入代码,添加代码。

6、最后点击运行,输入对应的数目,按下按钮,查看执行效果。

求MFC编写计算器的详细方法 步骤 代码

在MFC AppWized(exe)项目下做。界面自己做

1.在对话框的头文件CalculatorDlg.h中添加#includemath.h

2.为CCalculatorDlg类添加成员数据和成员函数

double number1,number2;

int NumberState,OperationState;

void cal();

并在CCalculatorDlg类的构造函数中增加NumberState=1;

3.添加消息按钮afx_msg void OnNumberKey(UINT nID);

afx_msg void OnOperationKey(UINT nID);

4.在CalculatorDlg.cpp文件中BEGIN_MESSAGE_MAP(CMy1Dlg, CDialog)和END_MESSAGE_MAP()间添加代码

ON_COMMAND_RANGE(IDC_NUMBER1,IDC_NUMBER10,OnNumberKey)

ON_COMMAND_RANGE(IDC_NUMBER11,IDC_NUMBER20,OnOperationKey)

5.为成员函数OnNumberKey和OnOperationKey添加代码

void CCalculatorDlg::OnNumberKey(UINT nID)

{

int n=0;

switch(nID)

{

case IDC_NUMBER1:n=1;break;

case IDC_NUMBER2:n=2;break;

case IDC_NUMBER3:n=3;break;

case IDC_NUMBER4:n=4;break;

case IDC_NUMBER5:n=5;break;

case IDC_NUMBER6:n=6;break;

case IDC_NUMBER7:n=7;break;

case IDC_NUMBER8:n=8;break;

case IDC_NUMBER9:n=9;break;

case IDC_NUMBER10:n=0;break;

}

if(NumberState==1)

{

m_result=m_result*10+n;

number1=m_result;

UpdateData(FALSE); // 更新编辑框中的值

}

else

{

m_result=m_result*10+n;

number2=m_result;

UpdateData(FALSE);

}

}

void CCalculatorDlg::OnOperationKey(UINT nID)

{

switch(nID)

{

case IDC_NUMBER13: // "/"按钮

OperationState=1;

UpdateData(FALSE);

m_result=0;

NumberState=2;

break;

case IDC_NUMBER14: // "*"按钮

OperationState=2;

UpdateData(FALSE);

m_result=0;

NumberState=2;

break;

case IDC_NUMBER15: // "+"按钮

OperationState=3;

UpdateData(FALSE);

m_result=0;

NumberState=2;

break;

case IDC_NUMBER16: // "-"按钮

OperationState=4;

UpdateData(FALSE);

m_result=0;

NumberState=2;

break;

case IDC_NUMBER17: // "C"按钮,撤消用,不需要可以删除

number1=number2=m_result=0;

UpdateData(FALSE);

NumberState=1;

break;

case IDC_NUMBER20: // "="按钮

cal(); // 调用cal成员函数

break;

}

}

6.为成员函数cal()添加代码

void CCalculatorDlg::cal()

{

switch(OperationState)

{

case 1:

m_result=(double)number1/number2;

UpdateData(FALSE); // 更新编辑框中的结果

number1=m_result; // 把此次的运算结果作为下一次运算的第一个操作数

NumberState=2; // 下次输入的数作为第二个操作数

break;

case 2:

m_result=number1*number2;

UpdateData(FALSE); // 更新编辑框中的结果

number1=m_result;

NumberState=2;

break;

case 3:

m_result=number1+number2;

UpdateData(FALSE); // 更新编辑框中的结果

number1=m_result;

NumberState=2;

break;

case 4:

m_result=number1-number2;

UpdateData(FALSE); // 更新编辑框中的结果

number1=m_result;

NumberState=2;

break;

}

OperationState=0;

}

注意按钮的ID号要和程序中的ID号相同!!!!

mfc计算器代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mfc计算器程序、mfc计算器代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/3184.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载