MFC编程之设计美丽的对话框

目录

写在前面:

Part 1:美美的设计一下计算器的布局

1.描述文字:

​编辑

2.ID:

Part 2:美美熟悉一下计算器的工作流程

Part 3:美美设计一下控件功能

1.edit control:

2.相关变量初始化:

3.button:

3.1运算符按键

3.2数字按键

3.3关于UpdateData()函数

3.4清零按键

3.5等号按键


写在前面:

        接上集,我们已经创建好了一个什么用都没有的对话框,我们要做一个简易的计算器,就需要以下几个控件,如果不懂下面的界面是咋出来的建议复习上一集:

点我来上滑湿人自己的MFC第一课!

1.edit control:用来显示计算器的表达式和结果

2.button:用来输入表达式并进行相关运算

3.group:用来框柱单选框,提示用户同一框架下的若干选项

4.radio button:用于三角函数与对数的运算

5.text:用于文本的提示

Part 1:美美的设计一下计算器的布局

修改按钮相应的属性:

打开对话框,右键按钮,选择属性,会在屏幕右侧出现一个属性框,这个就是该控件对应的属性,此时单击其他的控件,会变成被点击的控件的属性,这里我们需要改这几项:

1.描述文字:

这个代表的是运行时这个按钮上面显示的文字

2.ID:

这个代表的是这个按钮在程序中相关的函数中出现时的名称

Part 2:美美熟悉一下计算器的工作流程

        计算器要先完成基本的加减乘除,就需要有一个变量用来存储我们输入的第一个数(tempvalue),还需要一个变量用来存储结果的值(result),还需要一个变量判断进行的运算(sort),还需要一个变量判断后面是否添加数字(append)。

下图展示了一个计算器的基本的运行流程:

Part 3:美美设计一下控件功能

1.edit control:

        首先,编辑框想要显示变量,就需要有一个变量用来存储它要显示的值,因此我们为其添加变量,定义变量名称为m_edit1。

        我们需要先右键编辑框,之后添加变量,类别更改为“值”,输入名称为“m_edit1”,变量类型选择“double”,之后点击完成。

2.相关变量初始化:

        前面我们提到了,我们需要用到变量tempvalue,result,sort和append,根据他们的用途,我们将前两个变量定义为double型,便于我们后续添加小数点的功能;后两个是状态的判断,因此我们将其设定为int型。

        首先,在解决方案资源管理器中打开名为“项目名Dlg.h”的头文件,找到名为“class CcalculatorDlg : public CDialogEx”的类,添加这四个变量,访问权限限定为public,修改后程序如下:

class CcalculatorDlg : public CDialogEx
{
// 构造
public:
	CcalculatorDlg(CWnd* pParent = nullptr);	// 标准构造函数
public:
	double tempvalue;
	double result;
	int sort;
	int append;
// 对话框数据
  ...
}

  之后,在解决方案资源管理器中打开名为“项目名Dlg.cpp”的源文件,找到名为“CcalculatorDlg::CcalculatorDlg(CWnd* pParent /*=nullptr*/)”的构造函数,将这四个变量初始化为合适的值,修改后程序如下: 

CcalculatorDlg::CcalculatorDlg(CWnd* pParent /*=nullptr*/)//构造函数
	: CDialogEx(IDD_CALCULATOR_DIALOG, pParent)
	, m_edit1(0)
{
	tempvalue = 0;//临时值
	result = 0;//结果值
	sort = 0;//计算法则判断 1+   2-   3*   4/
	append = 0;//判断后续是否输入数字:  1输入   0不输入
	point = 0;//未输入小数点
	count = 1;//0:未输入小数部分
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
3.button:

        在对话框中双击按钮,系统会自动生成它的相关函数原型与声明,我们只需要完成函数体即可。

3.1运算符按键

        由上面的工作流程图可知,当我们按下操作符按键时,sort要变成相应运算法则的变量值,如按下+按键,sort就变成1,后续按下=按键时对sort的值switch一下就可以得出结果。

        其次,之前输入的数字存储在result中,我们按下运算符按键时,将之前输入过的变量值赋值给tempvalue,之后让编辑框中的变量值清零,最后让append=1,代表我们已经按下了符号按钮,后续输入的将会是一个新的数字。

加号按钮响应函数如下,其余运算符按钮同理

void CcalculatorDlg::OnBnClickedButtonplus()
{
	sort = 1;
	tempvalue = result;
	m_edit1 = 0;
	append = 1;
}
3.2数字按键

   由上面的工作流程图可知,当我们按下数字按键时,如果append=1,说明我们刚按下了符号按钮,这是一个新的数字,因此将result的值清零。如果append!=1,就将result*10+按下的数字按键对应的值,将新的result赋值给编辑框的变量m_edit1;将append变量置0,表示我们正在输入数字。

        数字1按钮响应函数如下,其余运算符按钮同理

void CcalculatorDlg::OnBnClickedButton9()
{
	if (append == 1)
		result = 0;
	result = result * 10 + 9;
	m_edit1 = result;
	append = 0;
	UpdateData(FALSE);
}
3.3关于UpdateData()函数

UpdateData(TRUE);//用于将屏幕上控件中的数据交换到变量中。

UpdateData(FALSE);//用于将数据在屏幕中对应控件中显示出来。

3.4清零按键

        由上面的工作流程图可知,当我们按下清零按键时,将所有数据赋值为它构造函数时的初值,响应函数如下:

void CcalculatorDlg::OnBnClickedButtonc()
{
	tempvalue = 0;
	result = 0;
	m_edit1 = 0.0;
	UpdateData(FALSE);
}
3.5等号按键

        由上面的工作流程图可知,当我们按下等号按键时,switch一下我们之前的sort值,对result和tempvalue进行相应的运算操作,响应函数如下:

void CcalculatorDlg::OnBnClickedButtonequal()
{
	switch (sort) {
	case 1:
		result += tempvalue;
		break;
	case 2:
		result = tempvalue - result;
		break;
	case 3:
		result *= tempvalue;
		break;
	case 4:
		result /= tempvalue;
		break;
	}
	m_edit1 = result;
	UpdateData(FALSE);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/619266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Copilot for Microsoft 365 扩充新增 16 种语言

最近,微软公司发布公告,进一步扩大 Copilot for Microsoft 365 语言支持,新增 16 种,支持的语言总数达到 25 种。 新支持的语言如下: 阿拉伯语 捷克语 丹麦语 荷兰语 芬兰语 希伯来语 匈牙利语 韩语 挪威语&am…

Java面试之分布式篇

分布式锁的实现方案 (1)用数据库实现分布式锁比较简单,就是创建一张锁表,数据库对字段作唯一性约束。加锁的时候,在锁表中增加一条记录即可;释放锁的时候删除锁记录就行。如果有并发请求同时提交到数据库&…

二分判定+选插冒排序+归并快速堆希尔+计数排序

二分力扣题 一&#xff1a;搜索二维矩阵 74. 搜索二维矩阵 按照题意&#xff1a;直接利用二维数组转换成一维数组进行求解 方法一&#xff1a;普通等于的二分查找 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {t…

Shell编程之循环语甸与函数

for 遍历循环 1&#xff09;for 变量 in 取值列表 for i in $(seq 1 10) do 命令序列 .... done 2&#xff09;for ((变量初始值; 变量范围; 变量的迭代方式)) for ((i1; i<10; i)) do 命令序列 .... done IFS for循环取值列表分隔符 set | grep IFS …

SSH常用功能介绍-高级功能

一、介绍 SSH&#xff08;Secure Shell&#xff09;是一种用于远程登录和执行命令的网络协议&#xff0c;它提供了加密的连接&#xff0c;保证了数据的安全性。除了基本的远程登录功能外&#xff0c;SSH还提供了许多高级功能&#xff0c;以下是一些常用的高级功能介绍&#xf…

Redis集群安装

将Redis安装包分别上传到3个文件夹&#xff0c;并解压缩 #编译并指定安装目录 cd /root/usr/local/redis-cluster/redis-7001/redis-6.2.6/ make make PREFIX/root/usr/local/redis-cluster/redis-7001 install # cd /root/usr/local/redis-cluster/redis-7002/redis-6.2.6/ m…

FreeRTOS二值信号量

目录 一、信号量的概念 1、信号量的基本概念 2、信号量的分类 二、二值信号量简介 三、二值信号量相关API 1、创建二值信号量 2、释放二值信号量 3、获取二值信号量 四、二值信号量实操 1、实验需求 2、CubeMX配置 3、代码实现 一、信号量的概念 1、信号量的基本概…

使用 CloudFlare 后如何才能不影响搜索引擎蜘蛛爬虫

今天,明月给大家再次详细讲解一下,明月在使用 CloudFlare 后如何才能不影响搜索引擎蜘蛛爬虫对站点的抓取,因为这是很多首次使用 CloudFlare 的站长们容易忽略和触犯的问题,并不是 CloudFlare 不友好,而是 CloudFlare 的防火墙(WAF)实在是太给力。其实在【CloudFlare 如…

IDEA及Maven配置代理及Maven中央仓库配置详解

一、配置代理 首先&#xff0c;需要本地开启代理入口&#xff0c;如图。 这个跟你使用代理软件有关。像我使用的是qv2ray。 其次&#xff0c;idea配置代理&#xff0c;如图。 1.1 idea配置代理 打开Settings&#xff0c;如图 1.2 maven配置代理 maven配置代理&#xff0c;修…

2024湖南理工学院程序设计竞赛(同步赛) G. 区间递减(思维题 分类讨论 ST表)

题目 https://ac.nowcoder.com/acm/contest/82672/G 思路来源 出题人 涼風青葉7代码 题解 注意到三种情况即可&#xff0c; 第一种情况&#xff0c;10 9 8 1 2&#xff0c;保留1 第二种情况&#xff0c;6 5 10 9 4 4&#xff0c;保留5 4 4 第三种情况&#xff0c;6 5 4&…

基于Springboot的校园疫情防控管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园疫情防控管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

Python 整数类型(int)详解:无限范围与多种进制

引言 在编程中&#xff0c;整数是最基本的数据类型之一。不同编程语言对整数的处理方式各不相同&#xff0c;这往往影响到程序的性能和开发者的选择。本文将深入探讨 Python 中的整数类型&#xff08;int&#xff09;&#xff0c;其独特的处理方式&#xff0c;以及它在日常编程…

【数据结构】环状链表OJ题

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 一、OJ 环形链表&#xff1a; 快慢指针即可解决问题: 2情况&#xff1a; 快指针走到结尾&#xff08;不是环&#xff09;快指针和尾指针相遇&#xff08;是环的&#xff09; …

C语言——文件缓冲区

一、用户缓冲区和系统缓冲区 缓冲区的概念确实可以分为多个层次&#xff0c;其中最常见的两个层次是用户缓冲区和系统缓冲区。 这里的用户缓冲区和系统缓冲区都包括输入输出缓冲区。 1、用户缓冲区&#xff08;User-space Buffer&#xff09; 用户缓冲区是指由用户程序&…

09.zabbix自定义模块并使用

zabbix自定义模块并使用 根据tcp的11中状态获取值&#xff0c;进行批量配置监控项 [rootyunlong66 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp.conf UserParameterESTABLISHED,netstat -antp |grep -c ESTABLISHED UserParameterSYN_SENT,netstat -antp |grep -c SYN_SENT Use…

免费思维13招之七:空间型思维

免费思维13招之七:空间型思维 本篇给你带来的是空间型思维。 空间型思维,具体分为内部空间型思维和外部空间型思维。 什么叫内部空间型思维呢? 内部空间型就是充分利用现有空间或资源为社会提供免费服务,积累人气,增加流量,从而带动消费。 为什么你生意不好?为什么你…

银河麒麟服务器操作系统扩展磁盘容量方法(非LVM)

此方法的使用场景为&#xff1a;对普通的分区扩容&#xff0c;分区格式为xfs&#xff0c;不适用于lvm逻辑卷的扩容。 注意&#xff1a;扩展磁盘空间的操作风险较高&#xff0c;最好先做好备份&#xff0c;或在实验环境下操作成功后&#xff0c;再对目标系统进行扩容操作&#…

当代 Qt 正确的 安装方法 及 多版本切换

此文写于 20240511 首先去网站Index of /official_releases/online_installers下载一个安装器 安装器有什么用? 可以浏览安装版本 安装组件 安装器版本越能 能装的东西越多 现在只能选Qt5 和 Qt6 至于你公司用的Qt4 我也没招 见招时再拆招 安装器 默认国外源 可以换国内…

栈的讲解

栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底&#xff08;因为先进后出&#xff09;。栈中的数据元素遵守后进先出LIFO&#xff08;Last In Firs…

18 【Aseprite 作图】工具栏介绍

1 在没有输入法的情况下&#xff0c; 按住Shift 大写的N&#xff0c;就可以快速新建图层 ctrl z 撤回这个图层 2 双击图层&#xff0c;可以修改图层名称和属性 3 按住图层&#xff0c;拖动图层&#xff0c;可以把图层拉到 组&#xff0c;就可以方便一组一组管理图层 4 保存的…