学习最有效的方法就是实战,这两篇文章写了做MFC加减乘除计算器的过程。

第一写前台MFC界面搭建,第二写后台计算原理及代码。

MFC编程参考教程:http://www.jizhuomi.com/school/c/149.html

第二篇文章链接:C++做四则运算的MFC计算器(二)栈转换和计算后缀表达式

  搭建MFC项目

以VS2017为例,新建项目->MFC项目,写名字,设路径

应用程序类型,选择基于对话框的,其他默认即可,直到最后一步

生成的类选择Dlg

完成后,项目里会有很多自动添加的资源

.ico是图标,随便玩。

.rc和.rc2:rc2文件包含项目使用的附加资源的脚本文件。可以在项目的 .rc 文件的顶部包括 .rc2 文件。 .rc2 文件用于存放由多个不同项目使用的资源。不必为不同的项目多次创建相同的资源,而是可以将它们放在一个 .rc2 文件中,然后将该 .rc2 文件包括在主 .rc 文件中。双击都会调到资源视图,在这编辑界面。

Dialog就是主要编辑的地方,ABOUTBOX是帮主窗口,MFCCALCULATION_DIALOG是主要窗口

那怎么加东西呢?在工具箱里,工具箱一般在侧面的一个犄角格拉里,竖着的,里面有各种组件,感兴趣的玩玩看。

此处用button按钮、Edit Control编辑框和static text静态文本就够了。

把button拖到界面上,再按Ctrl拖能复制,数字0-9、+、-、*、/、(、)、删除、清空和 =,19个按钮。用参考线(格式->参考线设置)布局更方便。

右键按钮->属性,显示控件的各种属性,其中Caption属性是按钮的内容,写“1”按钮就显示“1”,窗口的Caption就是窗口的标题。每个控件的ID属性是独立的,用默认生成的就行,也可以自己编写。

  按钮事件

“删除”按钮点一次删除一个字符,“清空”按钮就是清空,其他按钮每点一次,表达式编辑框就加一个字符

先为编辑框创建“值”变量、“控件”变量来控制内容,简单地理解:“值”给“控件”就会显示。右键表达式编辑器->添加变量

“值”类别是编辑框要现实的内容,名称为editv。再以同方法建“控件”类别的变量editc。

计算结果框也要有“值”变量和“控件”变量,分别是resultv、resultc。

接下来为每个按钮单击时显示到编辑框中。

双击按钮,自动添加单击事件的函数,并跳转到MFCcalculationDlg.cpp,

使用UpdateData(false)将变量值给控件,要反过来把false改成true,这个后面会用到。为每个按钮添加对应的函数。

实现删除使用editv = editv.Left(editv.GetLength() - 1),Left(n)取左边n个字符,editv.GetLength()取editv的长度,长度-1就删掉最后一个。

实现清空使用editv = "";

“=”的功能是将控件的值传给变量,再调用其他计算函数计算,把计算结果传给另一个编辑框中。在这里先实现显示计算表达式。

调试结果是这个样子的:

第二篇文章:C++做四则运算的MFC计算器(二)栈转换和计算后缀表达式

C++做四则运算的MFC计算器(一)MFC界面创建的更多相关文章

  1. C++做四则运算的MFC计算器(二)栈转换和计算后缀表达式

    上篇写了MFC界面搭建,这篇就写实现计算.涉及到数据结构,对新手很不友好. 虽然是MFC程序,但是能灵活地分离后台代码,自行构建控制台程序. 上篇文章链接:C++做四则运算的MFC计算器(一)MFC界 ...

  2. [Sciter系列] MFC下的Sciter–1.创建工程框架

    Sciter SDK中提供的Win32下例程很多,唯独使用很多(对我个人而言)的MFC框架下Sciter程序的构建讲的很少,虽然MFC有这样那样的诟病,但是不可否认的是编写一般的小项目,这仍然是大多数 ...

  3. [Sciter系列] MFC下的Sciter–1.创建工程框架

      Sciter SDK中提供的Win32下例程很多,唯独使用很多(对我个人而言)的MFC框架下Sciter程序的构建讲的很少,虽然MFC有这样那样的诟病,但是不可否认的是编写一般的小项目,这仍然是大 ...

  4. 在MFC[转载]在MFC状态栏显示时间 状态栏显示时间

    原文:在MFC状态栏显示时间,谢小哈皮儿 c/c++ vc 在mfc状态栏显示时间,在VC的控件中有个Status bar可以在窗体状态栏中添加日期和时间.其实通过简单的代码,你就能创建一个有时钟显示 ...

  5. 让MFC程序隐藏运行界面

    在MFC中隐藏运行界面确实花花点功力. 针对对话框程序,一种不是很好地实现方法是在OnPaint函数中添加如下代码: CWnd::ShowWindow(SW_HIDE); 添加后执行会发现屏幕会闪烁一 ...

  6. VC/MFC如何添加启动界面

    2015-05 转自 香远益清原文VC/MFC如何添加启动界面 1.基于框架类的应用程序添加启动画面的步骤(利用组件库中的Splash Screen组件生成Splash1.cpp 和Splash1.h ...

  7. Dynamic Property Wizard 添加类提示 ATL类只能添加到MFC EXE 和MFC规则DLL项目或完全支持ATL的项目 错误提示解决方式

    在重新打开OPM项目添加ATL动态属性向导Dynamic Property Wizard提示错误 ATL类只能添加到MFC EXE 和MFC规则DLL项目或完全支持ATL的项目. 有效的解决方式,右键 ...

  8. JAVA实现四则运算的简单计算器

    开发环境eclipse java neon. 今天用JAVA的swing界面程序设计制作了一个四则运算的简易计算器.代码以及截图如下: computer.java: ///////////////// ...

  9. 用面向对象的方式操作 JSON 甚至还能做四则运算 JSON 库

    前言 在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没有将其映射为一个具体的 struct:如果想要获取值就需要先做断言将其转换为 map 或 ...

随机推荐

  1. ios开发之block的使用,及注意事项

    转自:http://my.oschina.net/u/1432769/blog/390401 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于 ...

  2. HashMap 实现原理解析

    概要 HashMap 最早出现在 JDK 1.2 中,底层基于散列算法实现.HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0.HashMap 并不保证 ...

  3. 10分钟搞定nginx实现负载均衡

    10.1 负载均衡的概念 对用户请求的数据进行调度的作用 对用户访问的请求网站可以进行压力的分担 10.2 常见的代理方式 10.2.1 正向代理 10.2.2 反向代理 10.3 负载均衡的部署环节 ...

  4. ARTS-S C语言主线程获取子线程返回值

    #include<stdio.h> #include<stdlib.h> #include <pthread.h> typedef struct { int stu ...

  5. Orleans 序列化遇到的坑

    真的是巨坑 搞明白问题的我简直无法用言语来描述我的心情 先上架构图 理想中的架构 服务随便上 网关只负责分发 然后跟随官方教程写遇到了序列化问题 以前有经验,不慌,以前稀里糊涂就搞定了. 再然后遇到一 ...

  6. 从FPGA搞定OV7670 VGA显示 移植到 STM32F10x TFT显示 总结及疑问(高手请进)

    OV7670不愧是最便宜的摄像头了最大显示像素:640*480(在VGA显示器上显示效果还不赖,用usb模块采集显示依然显著) 第一步:VGA显示 视频图像(实时)FPGA+SDRAM+OV7670= ...

  7. Day 08 作业

    有如下值集合 [11, 22, 33, 44, 55, 66, 77, 88, 99, 90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中 ​ ...

  8. Redis实战 | 5种Redis数据类型详解

    我们知道Redis是目前非常主流的KV数据库,它因高性能的读写能力而著称,其实还有另外一个优势,就是Redis提供了更加丰富的数据类型,这使得Redis有着更加广泛的使用场景.那Redis提供给用户的 ...

  9. WebSocket重连实现

    方式一.使用第三方库实现 比如:reconnecting-websocket.jsReconnectingWebSocket,代码:https://github.com/joewalnes/recon ...

  10. spring+activemq实战之配置监听多队列实现不同队列消息消费

    摘选:https://my.oschina.net/u/3613230/blog/1457227 摘要: 最近在项目开发中,需要用到activemq,用的时候,发现在同一个项目中point-to-po ...