ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:629.30KB ,
资源ID:17194688      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17194688.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC计算器Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MFC计算器Word文件下载.docx

1、STEP 1(页面设计部分与控件添加部分) 首先打开VC,选择MFC AppWizardexe,设定好路径和工程名(这里我设置工程名为为“My”)。这里要注意的是在创建向导步骤1的时候,我们选择“基本对话框”。之后我们可以点击完成便看到以下界面此时我们把当前页面上原配的控件按Delete全部清除(如下图)接着我们按照MFC自带的控件选项进行我们本次计算器的控件添加(以下是控件)我们在原先清空的界面中依次用上图控件画出一个基本的计算器页面(如下图)。当然作为“所见即所得”的MFC控件设计,干净整齐的界面是基本要求,甚至会影响用户的心情。上图我们用按钮控件添加一共15个按钮,分别是数字“ 0 9”

2、 以及 “+ - * /”。每个控件“属性”都有属于它自己的ID,默认的按钮按键为IDC_BUTTON0,而且Cap当然我们为了“顾名思义”,对控件ID进行修改成我们容易辨认的(也可以不改),添加完控件并修改ID之后。(如下图)这里我们把数字按钮0 设置ID为IDC_BUTTON14_NUM0,其他的依次类推完成修改ID后,就需给控件添加消息响应了,基本操作可以是直接双击控件,便会有向导提示。MFC默认下了的响应信息都为On_开头,而且以下显示的是数字5的消息响应.之后所有的依次类推,这步骤一般不对成员函数名称做任何修改,直接点击OK即可之后就会跳转到具体的代码实现过程 这里我们依次给每一个控

3、件添加消息响应函数(以下仅列出一部分)到此为止 我们基本上完成了计算器页面的前半部分预备工作,下来是我们的对控件具体实现代码的添加这里我把添加的控件消息响应函数列出来这里忘记了,提醒一点编辑框控件的ID是IDC_EDIT1IDC_EDIT2IDC_EDIT3还有 加减乘除的控件添加当初没有进行名字的设置默认为void CMyDlg:OnButton1()/加OnButton2()/减OnButton3()/乘OnButton4()/除/在开始第二步之前有一项工作时必须要做的,那便是添加3个成员变量和一个CEdit类的变量具体添加方法,就是右键主对话框CMyDlg-Add Member Vari

4、able也可以是在菜单栏中选择“查看”-“建立类向导”这里我们把3个编辑框控件内的变量都改变为double型的(因为进行四则运算难免出现小数点)之后再在控件IDC_EDIT3中选择Add Variable并且数据类型选择 Control类型 此时变量自动改为了 CEdit类这步的意思是说 我们把编辑框控件3的设置为CEdit类 并且设置一个成员对象是m_CResult。/STEP 2(控件消息响应函数具体代码添加部分)首先从加法开始OnButton1()/ TODO: Add your control notification handler code hereUpdateData();dou

5、ble 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的窗口函数,用来刷新数据的由于我们进行基本运算需要更新数据 所以必须添加这个函数。(可以认为是必须的)以上代码是进行 加法的基本语句,然后数组保存并格式化打印输出。此句是把结果输出在之前用CEdit类创建的对象m_CResult,m_CResult调用SetWindowText(sz);把结果显示在编辑框中。无独有偶剩下

6、的减法 乘法 和除法 也是大同小异(只是把 符号小改一下便可)这里贴出所有加减乘除的代码OnButton2()n_result = m_num1 - m_num2;OnButton3()n_result = m_num1 * m_num2;OnButton4()n_result = m_num1 / m_num2; 这里我特地说明一下 由于我们预设了2个编辑框所想实现的功能是,如在编辑框1内输入一个输入30,然后再编辑框2内输入另一个数字20,并且再进行运算。那么存在一个问题。这个问题其实困惑了我很久,那就是,如何用判断用户是在哪个编辑框上输入了数字,所以我们需要给程序加入一个功能,那便是判断

7、用户是在编辑框1输入,还是编辑框2内输入。 那么我们想,在日常我们用电脑的过程中,一般都是用鼠标去点击编辑框来进行一系列操作。那么我可以加入一个鼠标左键点击WM_LBUTTONDOWN消息和一个 EN_SETFOCUS事件来响应这个鼠标消息。 EN_SETFOCUS为判断焦点事件(通俗点说,那便是判断光标在什么地方) 这样一来,一切逻辑都理顺了。我们用户用鼠标选择并点击编辑框的时候,我们用WM_LBUTTONDOWN消息去响应,然后与此同此,我们把响应的和EN_SETFOCUS联系起来,我们预设一个全局变量nEditFlag ,作为在EN_SETFOCUS函数里的一个 标记,并在鼠标点下的时候

8、用nEditFlag 去表示编辑框目前被选定的状态,nEditFlag =1 的时候我们就判断用户选择了编辑框1 ,再者当nEditFlag =2的时候说明编辑框2被选定。这里我告诉大家如何添加 事件 EN_SETFOCUS,由于EN_SETFOCUS是一个判断焦点的,所以对象应该是编辑框1和编辑框2里添加,所以我们回到对话框编辑页面。“右键编辑框1”-点击“事件”- “选择EN_SETFOCUS”(这里程序默认的响应函数是OnsetfocusEdit1)依次类推我们也给编辑框2添加事件响应函数OnsetfocusEdit2,方法同上如下图设置好之后,我们还要做一些初始化工作,在程序运行之初,

9、我们先初始化nEditFlag = 0;那么在哪里初始化呢?很简单,正如大家想的一样在OnInitDialog()内进行初始化我们只需在OnInitDialog()函数中 加入一句nEditFlag = 0;便可以了(如下图黑条字体部分)/之后我们再为两个事件响应函数进行OnsetfocusEdit1()和OnsetfocusEdit2()添加代码当用户选定编辑框1的时候,nEditFlag = 1;当用户选定编辑框2的时候,nEditFlag = 2;而鼠标消息WM_LBUTTONDOWN具体代码如下/STEP 3(按键09的响应部分)这里由于代码都大同小异,所以就用数字按钮1,2来进行简要

10、说明用if语句去判断标记常量 nEditFlag 从而给判断是m_num1还是m_num2进行操作这里m_num1是编辑框1内的数字m_num2是编辑框2内的数字剩下了39代码以上大同小异。这里进行一个说明m_num2=m_num2*10+1; 很多人会问这步是说明意思,这步乍看貌似有点一头雾水(当初我也是这样)但是仔细看看还是能看明白的。比方说 用户想打出自然数“234”用户第一次点的数字是2 那么此时对应代码执行是这段m_num2=m_num2*10+2; 那么m_num2 = 0*10 +2 (初始化时m_num2 = 0)之后如果在点击3的时候执行的代码是m_num2=m_num2*1

11、0+3; (此时经过第一步m_num2已经为2了,再点了3 结果为m_num2= 2*10+3 = 23)最后点击4 执行的代码是m_num2=m_num2*10+4;(23*10 +4=234)通过以上小例子 大家明白了吧 为什么要 “先乘以10 再加 数字”/ 总结,其实这次非主流计算器编写,(说是非主流,说白了就是有2个编辑框输入数字,人家XP只有1个编辑框)。最大的障碍就是唯独是那个EN_SETFOCUS这个函数的空白了。我只单存的XX到GetFocus()能获得焦点,但是其实问题远远并没有那么简单,涉及到很多问题。我当初设置判断的时候还不知道用一个EN_SETFOCUS,并且初始化标

12、记这个方法,过后才知道。我把之前的错误帖一下顺便是当作是一个警告OnButton14Num0()UpdateData(TRUE);if( GetDlgItem(IDC_EDIT1)-GetFocus() m_num1=m_num1*10+0;else if( GetDlgItem(IDC_EDIT2)-m_num2=m_num2*10+0;UpdateData(FALSE);/分析GetDlgItem()如果大家不熟悉的话 我可以先解释一下是获得编辑框首先GetDlgItem(IDC_EDIT1)获取了ID为IDC_EDIT1也就是编辑框CEdit类的对象的指针,继承了CWnd类函数GetFo

13、cus是CWnd中的静态函数,来看一下函数原型:static CWnd* PASCAL GetFocus( );返回值是CWnd* 类型的,也就是说如果当前对话框或是控件被focus,那么就返回这个对话框或控件的指针.我错误的在if语句中将这个指针返回值当作了判断条件,所以呢,如果指针为NULL则if不执行,否则if就会执行。因为CEdit是一个控件类,其父窗口是有的,就是计算器的主窗口。所以当程序运行的时候,无论是第一个编辑框被focus或是第二个编辑框被focus,只要主对话框被focus了,那么调用GetDlgItem(IDC_EDIT1)-GetFocus()还是调用GetDlgIte

14、m(IDC_EDIT2)-GetFocus()还是直接调用this-GetFocus()它们的返回值都是一样的,就是父对话框的指针。当然不为NULL,所以第一个if就会执行。所以就显示在第一个编辑框了。 忙活了大半天,还是自己的积累不够。弄到最后根本不是在研究计算器怎么写的问题,而是那个GetFocus() 和EN_SETFOCUS()等问题。这几天太累了,过得浑浑噩噩,程序的进展也极其缓慢,讨厌去动手实践,往往是有想法,但是没心情去弄,我自己也深知这个是大忌,可能是最近睡眠不足吧,还有其他课程的紧张造成我不能把心思全部投入到C+中唉是在惭愧 我也反省了 最后还是庆幸自己克服了困难,实现了“鼠标点击”功能吧 改天写一个准Windows的计算器。 不过这个那是后话了,下去目标是网络版的贪吃蛇,现在毫无头绪啊

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1