版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简易计算器制作步骤:1、创建基于对话框的MFC(EXE)应用程序Calculator;2、在对话框窗体上顺序创建0到9十个数字按钮,并设置其标识符分别为IDC_0到IDC_9,其它按钮按下表设置属性:3、按表2添加各运算按钮的消息处理函数4、为使0到9十个数字按钮响应相同的消息处理函数,定义宏ON_COMMAND_RANGE(1) / CalculatorDlg.h/AFX_MSG(CCalculatorDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void
2、OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnAdd();afx_msg void OnMinus();afx_msg void OnMutiply();afx_msg void OnDivid();afx_msg void OnClear();afx_msg void OnSign();afx_msg void OnPoint();afx_msg void OnEqual();afx_msg void OnSqrt();afx_msg void OnRecip();afx_msg void OnOperandInput(
3、UINT iID);/注意先向类中添加protected 型成员函数OnOperandInput,然后再屏蔽掉类中的该函数声明,在此位置添加此说明/AFX_MSG(2)/CalculatorDlg.cppBEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)/AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_ADD, OnAdd)ON_BN_CLICKED(IDC_MINUS, OnMinus)ON_BN_CLICKED(
4、IDC_MUTIPLY, OnMutiply)ON_BN_CLICKED(IDC_DIVID, OnDivid)ON_BN_CLICKED(IDC_CLEAR, OnClear)ON_BN_CLICKED(IDC_SIGN, OnSign)ON_BN_CLICKED(IDC_POINT, OnPoint)ON_BN_CLICKED(IDC_EQUAL, OnEqual)ON_BN_CLICKED(IDC_SQRT, OnSqrt)ON_BN_CLICKED(IDC_RECIP, OnRecip)ON_COMMAND_RANGE(IDC_0,IDC_9,OnOperandInput)/使用一个消
5、息函数来处理对某个ID范围内所有控件的命令响应/AFX_MSG_MAPEND_MESSAGE_MAP()5、在头文件CalculatorDlg.h中添加类型、成员变量及成员函数(1)自定义类型(定义在类外)enum Operator OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide;enum CalcError ErrNone,ErrDivideByZero;enum Func FuncSin, FuncTan, FuncCos, FuncSqrt, FuncSqre, FuncLn, FuncLog, FuncN, FuncRec, FuncExp, F
6、uncNone;(2)成员变量及函数(此处应定义为类CalculatorDlg的公有成员)float m_operand; /存储当前输入的操作数float m_accum; /存储当前的计算结果BOOL m_bCoff; /标识当前输入是否是小数float m_coff; /小数输入时的系数Operator m_operator; /enum型变量用以标识当前运算符CalcError m_errorState; /enum型变量用以标识当前运算状态Func m_func; /enum型变量用以标识当前运算函数类型BOOL m_bOperandAvail; /标识当前输入是否为新输入数字voi
7、d Calculate();/处理普通计算(用类向导,公有成员)void UpdateDisplay();/处理显示(用类向导,公有成员)void Run_Func();/处理函数运算(用类向导,公有成员)(3)为编辑框添加Cstring 变量m_result6、部分变量的初始化CCalculatorDlg:CCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CCalculatorDlg:IDD, pParent)/AFX_DATA_INIT(CCalculatorDlg)m_result = _T("");/AFX_DATA_
8、INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_coff=0.1;m_bCoff=0;m_errorState = ErrNone;m_bOperandAvail=FALSE;m_operator=OpNone;另:在文件CalculatorDlg.cpp中添加#include "math.h"7、添加各功能代码(1)数字输入消息处理函数void CCalculatorD
9、lg:OnOperandInput(UINT iID)ASSERT(iID >= IDC_0 && iID <= IDC_9);if(m_errorState!=ErrNone)return;if(!m_bOperandAvail)m_operand=0;if(!m_bCoff)m_operand=m_operand*10+(iID-IDC_0);elsem_operand=m_operand+(iID-IDC_0)*m_coff;m_coff*=0.1;m_bOperandAvail=TRUE;UpdateDisplay();(2)运算符消息处理函数void CC
10、alculatorDlg:OnAdd() /加/ TODO: Add your control notification handler code hereCalculate();m_operator=OpAdd;void CCalculatorDlg:OnMinus()/减/ TODO: Add your control notification handler code hereCalculate();m_operator=OpSubtract;void CCalculatorDlg:OnMutiply()/乘/ TODO: Add your control notification ha
11、ndler code hereCalculate();m_operator=OpMultiply;void CCalculatorDlg:OnDivid()/除/ TODO: Add your control notification handler code hereCalculate();m_operator=OpDivide;void CCalculatorDlg:OnSign() /处理正负号/ TODO: Add your control notification handler code herem_operand*=-1;UpdateDisplay();void CCalcula
12、torDlg:OnEqual()/处理等号/ TODO: Add your control notification handler code hereCalculate();m_operator=OpNone;void CCalculatorDlg:OnSqrt()/处理开根号/ TODO: Add your control notification handler code herem_func=FuncSqrt;Run_Func();void CCalculatorDlg:OnRecip() /求倒数1/x/ TODO: Add your control notification han
13、dler code herem_func=FuncRec;Run_Func();void CCalculatorDlg:OnPoint()/处理小数点/ TODO: Add your control notification handler code herem_bCoff=1;UpdateDisplay();void CCalculatorDlg:Calculate()/处理计算,注意用类向导先添加此成员函数if(m_errorState!=ErrNone)return;if(m_bOperandAvail)if(m_operator=OpNone)m_accum=m_operand;els
14、e if(m_operator=OpMultiply)m_accum*=m_operand;else if(m_operator=OpDivide)if(m_operand=0)m_errorState=ErrDivideByZero;elsem_accum/=m_operand;else if(m_operator=OpAdd)m_accum+=m_operand;else if(m_operator=OpSubtract)m_accum-=m_operand;m_bOperandAvail=FALSE;m_bCoff=0;m_coff=0.1;UpdateDisplay();void CC
15、alculatorDlg:Run_Func()/处理求根和求倒if (m_errorState != ErrNone)return;if (m_bOperandAvail)if(m_func=FuncSqrt)m_operand=sqrt(m_operand);if(m_func=FuncRec)m_operand=1/m_operand;UpdateDisplay();void CCalculatorDlg:UpdateDisplay()/处理显示if(GetSafeHwnd()=NULL)return;if(m_errorState!=ErrNone)m_result="除数不能
16、为零"elsefloat lval=(m_bOperandAvail)?m_operand:m_accum;m_result.Format(_T("%f"),lval);int i=m_result.GetLength();while(m_result.GetAt(i-1)='0')m_result.Delete(i-1,1);i-=1;UpdateData(FALSE);void CCalculatorDlg:OnClear() /处理清空/ TODO: Add your control notification handler code herem_operator = OpNone;m_operand = 0;m_accum = 0;m_bOperandAvail = FAL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学员业务验证复习测试卷附答案
- 新教材同步系列2024春高中地理热点微专题2自然资源与国家安全课件湘教版选择性必修3
- 2024届湖南明德中学高三1月模拟调研数学试题
- 教科版二年级上册科学期末试卷及答案
- 企业调查科科长竞争演讲稿
- 女儿店面开业活动方案
- 我会用剪刀课件
- 常见的小苍兰病虫害防治
- 大班拼音教育课件
- 关于服务工作心得体会五篇
- 小学科学实验教学的现状及改进策略的研究
- 2024年全国甲卷高考化学试卷(真题+答案)
- 第5课缤纷梦家园(教案)- 三年级上册信息技术 粤教版(B版)
- 统一消息中心平台建设需求
- JTT1496-2024公路隧道施工门禁系统技术要求
- DL-T5704-2014火力发电厂热力设备及管道保温防腐施工质量验收规程
- 2024年大学生就业形势调查报告13篇
- 重庆市北碚区水土街道公开选拔11名农村本土人才及社区后备干部高频考题难、易错点模拟试题(共500题)附带答案详解
- 医用离心机校准规范
- 小学书法教育调查研究报告总结
- 乒乓球火箭实验
评论
0/150
提交评论