




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
手把手教MFC做计算器(2010-10-27 16:20:15) 转载标签: 杂谈分类: Cplusplus 上个月,国庆期间在研究MFC贪吃蛇的程序之余,很有兴致去想做一个“加法器”,顾名思义也就只能实现一个加法功能而已。当初是做出来了,不过是只能用键盘输入数字的,这个和Windows自带的计算器有差别,再者,我当初做的加法器实现的方式很简单,就是用在对话框页面中添加2个编辑框控件和一个按钮控件“+”,然后关联ID,然后再CDialog中添加代码实现功能。 近日,在继续学习MFC的过程,看到这个半成品,就有完善它成为一个计算器的想法,当然就在此基础上。这里声明,该计算器的制作方法和过程和百度上的有一些区别,并不是“很常规”的那种计算器写法,纵然是我自己练手的作品,但是一些基本的功能也是能实现的,现在就手把手教制作这个计算器。/STEP 1(页面设计部分与控件添加部分) 首先打开VC,选择MFC AppWizardexe,设定好路径和工程名(这里我设置工程名为为“My”)。这里要注意的是在创建向导步骤1的时候,我们选择“基本对话框”。之后我们可以点击完成便看到以下界面此时我们把当前页面上原配的控件按Delete全部清除(如下图)接着我们按照MFC自带的控件选项进行我们本次计算器的控件添加(以下是控件)我们在原先清空的界面中依次用上图控件画出一个基本的计算器页面(如下图)。当然作为“所见即所得”的MFC控件设计,干净整齐的界面是基本要求,甚至会影响用户的心情。上图我们用按钮控件添加一共15个按钮,分别是数字“ 0 9” 以及 “+ - * /”。每个控件“属性”都有属于它自己的ID,默认的按钮按键为IDC_BUTTON0,而且Cap当然我们为了“顾名思义”,对控件ID进行修改成我们容易辨认的(也可以不改),添加完控件并修改ID之后。(如下图)这里我们把数字按钮0 设置ID为IDC_BUTTON14_NUM0,其他的依次类推完成修改ID后,就需给控件添加消息响应了,基本操作可以是直接双击控件,便会有向导提示。MFC默认下了的响应信息都为On_开头,而且以下显示的是数字5的消息响应.之后所有的依次类推,这步骤一般不对成员函数名称做任何修改,直接点击OK即可之后就会跳转到具体的代码实现过程 这里我们依次给每一个控件添加消息响应函数(以下仅列出一部分)到此为止 我们基本上完成了计算器页面的前半部分预备工作,下来是我们的对控件具体实现代码的添加这里我把添加的控件消息响应函数列出来这里忘记了,提醒一点编辑框控件的ID是IDC_EDIT1IDC_EDIT2IDC_EDIT3还有 加减乘除的控件添加当初没有进行名字的设置默认为void CMyDlg:OnButton1()/加void CMyDlg:OnButton2()/减void CMyDlg:OnButton3()/乘void CMyDlg:OnButton4()/除/在开始第二步之前有一项工作时必须要做的,那便是添加3个成员变量和一个CEdit类的变量具体添加方法,就是右键主对话框CMyDlg-Add Member Variable也可以是在菜单栏中选择“查看”-“建立类向导”这里我们把3个编辑框控件内的变量都改变为double型的(因为进行四则运算难免出现小数点)之后再在控件IDC_EDIT3中选择Add Variable并且数据类型选择 Control类型 此时变量自动改为了 CEdit类这步的意思是说 我们把编辑框控件3的设置为CEdit类 并且设置一个成员对象是m_CResult。/STEP 2(控件消息响应函数具体代码添加部分)首先从加法开始void CMyDlg:OnButton1()/ TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 + m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result);m_CResult.SetWindowText(sz);UpdateData() 是MFC的窗口函数,用来刷新数据的由于我们进行基本运算需要更新数据 所以必须添加这个函数。(可以认为是必须的)n_result = m_num1 + m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result);以上代码是进行 加法的基本语句,然后数组保存并格式化打印输出。m_CResult.SetWindowText(sz);此句是把结果输出在之前用CEdit类创建的对象m_CResult,m_CResult调用SetWindowText(sz);把结果显示在编辑框中。无独有偶剩下的减法 乘法 和除法 也是大同小异(只是把 符号小改一下便可)这里贴出所有加减乘除的代码void CMyDlg:OnButton1()/ TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 + m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result);m_CResult.SetWindowText(sz);void CMyDlg:OnButton2()/ TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 - m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result);m_CResult.SetWindowText(sz);void CMyDlg:OnButton3()/ TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 * m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result);m_CResult.SetWindowText(sz);void CMyDlg:OnButton4()/ TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 / m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result);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()添加代码当用户选
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新员工试用期合同书
- 2025承诺的合同范本
- 2025南京房屋租赁合同范本
- 2025华夏银行社会招聘模拟试卷及答案详解(考点梳理)
- 2025年济柴动力有限公司春季高校毕业生招聘(10人)考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025黑龙江伊春市铁力市招聘城市社区工作者笔试考前自测高频考点模拟试题及答案详解(易错题)
- 2025年武警安徽总队医院招聘41人考前自测高频考点模拟试题参考答案详解
- 2025年中国化妆品抗氧化剂行业市场分析及投资价值评估前景预测报告
- 2025年中国滑雪靴固定器行业市场分析及投资价值评估前景预测报告
- 2025年中国户外折叠床行业市场分析及投资价值评估前景预测报告
- 高三为梦想扬帆++励志班会课件
- 个人简历模板(5套完整版)
- 跟踪出站调车讲解
- 2023-2024年贵州省劳动合同样本范本书电子版完整版
- 耳部全息铜砭刮痧
- 煤气发生炉拆除方案
- 《新概念英语》第三册课文详解及课后答案
- 聚氨酯管道保温施工方案
- 金匮要略-黄芪桂枝五物汤
- J17J177 钢丝网架珍珠岩复合保温外墙板建筑构造
- 酒店账单-水单-住宿
评论
0/150
提交评论