好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

VS2008下计算器的MFC编程实现.doc

19页
  • 卖家[上传人]:共***
  • 文档编号:100906979
  • 上传时间:2019-09-25
  • 文档格式:DOC
  • 文档大小:1.01MB
  • / 19 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • VS2008下计算器的MFC编程实现简单的计算器编程,完全在VS2008下实现,主要用于熟悉VS2008的功能谨以此分享给和我一样初学MFC的朋友们STEP1:页面设计1.新建工程首先打开Visual Studio2008,选择MFC应用程序,设定好路径和工程名(这里我设置工程名为为“Calculator”)这里要注意的是在创建向导步骤1的时候,我们选择“基本对话框”,其他选项默认即可  之后我们可以点击完成便看到以下界面:此时我们把当前页面上原配的控件按Delete全部清除(如下图)2.添加控件接着我们按照MFC自带的控件选项进行我们本次计算器的控件添加点击右侧的工具栏按钮(以下是控件)我们在原先清空的界面中依次用上图控件画出一个基本的计算器页面(如下图)当然作为“所见即所得”的MFC控件设计,干净整齐的界面是基本要求,甚至会影响用户的心情3.修改空间ID和Caption上图各控件类型如下:Group BoxEdit ControlButtonGroup Box:选择其中一个GroupBox,右键单击,选择[属性]在右边显示属性对话框每个控件“属性”都有属于它自己的ID,默认的Group Box的ID为IDC_STATIC,而且Cap当然我们为了“顾名思义”,对控件ID进行修改成我们容易辨认的(也可以不改),添加完控件并修改ID。

      4个Group Box的ID分别修改为IDC_STATIC_FRAME ,IDC_STATIC_IN, IDC_STATIC_RESULT, IDC_STATIC_BUTTON控件Edit Control和Button也按相同的办法处理ID设置完成可以在“Resourse.h”中查看 完成修改ID后,就需给控件添加消息响应了在属性对话框的上方点击闪电“”图标,添加控件事件如对于按钮“”,点击“” 点击下拉键头,添加控件事件,页面自动切换到代码的编辑页面,如“添加OnBnClickedButton5”MFC默认下了的响应信息都为On_开头 到此为止 我们基本上完成了计算器页面的前半部分预备工作,接下来是我们的对控件具体实现代码的添加 这里我把添加的控件消息响应函数列出来点击左侧栏的“类试图”(或者选择菜单项“视图(V)”——“类试图”)4.添加成员变量在开始第二步之前有一项工作时必须要做的,那便是添加3个成员变量和一个CEdit类的变量具体添加方法:右键“类视图”中的类“CMyDlg”,选择“添加变量”也可以是在菜单栏中选择“项目”——>“添加变量”在添加变量向导(如下图)中 勾选“控件变量”,“控件ID”选择“IDC_EDIT1”,“类别”选择“Value”,“变量类型”选择“double”,变量名“m_num1”,点击“完成”,添加成功。

      然后依次为另外两个编辑框添加变量“m_num2”“m_result”这里我们把3个编辑框控件内的变量都改变为double型的(因为进行四则运算难免出现小数点)之后再在控件IDC_EDIT3中“类别”选择“ Control”类型 此时变量自动改为了 CEdit类,这步的意思是说 我们把编辑框控件3的设置为CEdit类 并且设置一个成员对象是m_CResultSTEP2:控件消息响应函数具体代码添加部分1.四则运算符首先从加法开始void CCalculatorDlg::OnBnClickedButton11Add(){ // TODO: 在此添加控件通知处理程序代码 UpdateData();//刷新数据 double n_result; n_result = m_num1 + m_num2; m_result = n_result;//加法的计算过程 char sz[20]; sprintf(sz,"%f",m_result); m_CResult.SetWindowTextA(sz);//打印输出}UpdateData() 是MFC的窗口函数,用来刷新数据的由于我们进行基本运算需要更新数据 所以必须添加这个函数。

      可以认为是必须的) n_result = m_num1 + m_num2;m_result = n_result;char sz[20];sprintf(sz,"%f",m_result);以上代码是进行 加法的基本语句,然后数组保存并格式化打印输出m_CResult.SetWindowText(sz);此句是把结果输出在之前用CEdit类创建的对象m_CResult,m_CResult调用SetWindowTextA(sz);把结果显示在编辑框中剩下的减法 乘法 和除法 也是大同小异(只是把 符号小改一下便可~~)这里贴出所有加减乘除的代码void CCalculatorDlg::OnBnClickedButton11Add(){ // TODO: 在此添加控件通知处理程序代码 UpdateData();//刷新数据 double n_result; n_result = m_num1 + m_num2; m_result = n_result;//加法的计算过程 char sz[20]; sprintf(sz,"%f",m_result); m_CResult.SetWindowTextA(sz);//打印输出}void CCalculatorDlg::OnBnClickedButton12Min(){ // TODO: 在此添加控件通知处理程序代码 UpdateData();//刷新数据 double n_result; n_result = m_num1 - m_num2; m_result = n_result;//减法的计算过程 char sz[20]; sprintf(sz,"%f",m_result); m_CResult.SetWindowTextA(sz);//打印输出}void CCalculatorDlg::OnBnClickedButton13Mul(){ // TODO: 在此添加控件通知处理程序代码 UpdateData();//刷新数据 double n_result; n_result = m_num1 * m_num2; m_result = n_result;//乘法的计算过程 char sz[20]; sprintf(sz,"%f",m_result); m_CResult.SetWindowTextA(sz);//打印输出}void CCalculatorDlg::OnBnClickedButton14Div(){ // TODO: 在此添加控件通知处理程序代码 UpdateData();//刷新数据 double n_result; n_result = m_num1 / m_num2; m_result = n_result;///除法的计算过程 char sz[20]; sprintf(sz,"%f",m_result); m_CResult.SetWindowTextA(sz);//打印输出}2.焦点事件  这里我特地说明一下    由于我们预设了2个编辑框所想实现的功能是,如在编辑框1内输入一个输入30,然后再编辑框2内输入另一个数字20,然后点击“+”、“-”、“*”、“/”中任何一个按钮,输出结果。

      那么存在一个问题就是,如何用判断用户是在哪个编辑框上输入了数字,所以我们需要给程序加入一个功能,判断用户是在编辑框1输入,还是编辑框2内输入   在日常我们用电脑的过程中,一般都是用鼠标去点击编辑框来进行一系列操作那么我可以加入一个鼠标左键点击WM_LBUTTONDOWN消息和一个 EN_SETFOCUS事件来响应这个鼠标消息 EN_SETFOCUS为判断焦点事件(通俗点说,那便是判断光标在什么地方)添加WM_LBUTTONDOWN消息在“类试图”中右键选择类“CCalculatorDlg”,打开“属性”对话框,点击“消息”选择“WM_LBUTTONDOWN”,点击下拉箭头,点击“<添加> OnLButtonDown”添加EN_SETFOCUS事件右键“编辑框1”,打开“属性”对话框,点击“控件事件”,选择“EN_SETFOCUS”(这里程序默认的响应函数是OnEnSetfocusEdit1()),点击添加依次类推我们也给编辑框2添加事件响应函数OnEnSetfocusEdit2(),方法同上这样一来,一切逻辑都理顺了我们用户用鼠标选择并点击编辑框的时候,我们用WM_LBUTTONDOWN消息去响应,然后与此同此,我们把响应的和EN_SETFOCUS联系起来,我们预设一个全局变量nEditFlag ,作为在EN_SETFOCUS函数里的一个 标记。

      并在鼠标点下的时候用nEditFlag 去表示编辑框目前被选定的状态,nEditFlag ==1 的时候我们就判断用户选择了编辑框1 ,再者当nEditFlag ==2的时候说明编辑框2被选定  设置好之后,我们还要做一些初始化工作,在程序运行之初,我们先初始化nEditFlag = 0;在CalculatorDlg.cpp文件中OnInitDialog()内进行初始化:我们只需在OnInitDialog()函数中 加入一句nEditFlag = 0;如下所示:之后我们再为两个事件响应函数进行OnsetfocusEdit1()和OnsetfocusEdit2()添加代码当用户选定编辑框1的时候,nEditFlag = 1;当用户选定编辑框2的时候,nEditFlag = 2;而鼠标消息WM_LBUTTONDOWN具体代码如下“STEP3:按键0~9的响应部分这里由于代码都大同小异,所以就用数字按钮1,2来进行简要说明剩下了3~9代码以上大同小异可能遇到的问题:问题一:1、重启VC2、打开Resource.h文件看看 一看就知道了 有些定义重复了 可以手动改掉 保存 编辑器重新加载 3、关闭解决方案,删除ncb文件重新添加即可。

      4、实在不行就手动添加消息处理5、查看.h和.cpp文件的属性,有可能是只读的,修改属性后就可以了6、把你要添加事件的对话框相应的类文件(*.h和*.cpp)给关了就可以了问题2:VS2008中MFC界面编程Caption中文全是乱码解决方法:首先到“资源视图”[Resource View]中找到对话框的ID号,对其右击选择“属性”[Properties],然后在右边的属性栏中找到“语言”[Language]项,默认是英语(美国),改成中文(中国),OK,问题解决问题3:m_CResult.SetWindowTextW(sz);参数1不能从“const char[20]”转换为“LPCTSTR”类型解决方案:选择菜单栏“项目”->“Calculator属性”,选择“配置属性”-> “常规”->“字符集”,选择“使用多字节字符集”编程过程中如果反复添加删除同名变量,函数可能会造成一些其他问题,但是通过报错信息可以自己改正。

      点击阅读更多内容
      猜您喜欢
      饭店服务技能综合实训花艺教学课件作者+题库7第七专题.ppt delphi实验一.doc 语文人教版六年级下册3、新来的王老师.docx 2018年河北大学教育学院333教育综合[专业硕士]之外国教育史考研强化五套模拟题.doc 第八章旅游资源开发与可持续发展.ppt 2018年沈阳理工大学思想政治理论课教学科研部801中国近现代史纲要考研强化五套模拟题.doc 第八章体育旅游经营管理体育经营管理理论与实务(第二版).ppt 2018年沈阳理工大学经济管理学院816会计学之中级财务会计考研强化五套模拟题.doc 2018年河北大学外国语学院823英语语言知识综合之语言学教程考研仿真模拟五套题.doc 语文人教版六年级下册21课《我最好的老师》ppt.ppt 土建质量员试题.docx 语文人教版六年级下册4.《顶碗少年》教学设计.doc 2018年河北大学新闻传播学院827新闻传播综合之传播学教程考研强化五套模拟题.doc 语文人教版六年级下册4、江畔独步寻花.pptx 语文人教版六年级下册21课.ppt 2018年沈阳理工大学思想政治理论课教学科研部801中国近现代史纲要考研仿真模拟五套题.doc 2018年河北大学新闻传播学院827新闻传播综合之传播学教程考研仿真模拟五套题.doc 第1章--绩效指标设计与绩效考核(-17).doc 饭店服务技能综合实训酒吧服务教学课件作者+题库第五专题朗姆酒、特基拉服务100721.ppt 八年级生物上册 5.2动物的运动和行为复习课件 (新版)新人教版.ppt
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.