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

news2024/11/27 6:22:22

目录

写在前面:

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.coloradmin.cn/o/1668939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.分布式-算法

目录 一、限流算法有哪些? 1.计数器算法(Counter-Based Algorithm) 2.固定窗口算法(Fixed Window) 3.滑动窗口算法(Sliding Window) 4.令牌桶算法(Token Bucket) 5.…

PyQt5中的QtDesigner窗口

文章目录 1. 简介2. QtDesigner的MainWindow2.1 创建MainWindow2.2 添加组件2.3 预览2.4 查看对应的Python代码2.5 保存窗口并命名为login.ui,如下所示2.6对ui文件进行转换得到.py原件 3. 窗口常用属性及说明3.1 设置对象名称3.2 改变标题名字3.3 修改窗口大小 4. 更…

pdf 版面分析与优化策略

1. 简介 版面分析作为RAG的第一步工作,其效果对于下游工作至关重要。 前常见的 PDF 解析方法包括三种 基于规则:根据 PDF 的组织特征确定每个部分的规则(风格和内容)缺点:不通用(PDF格式不固定&#xf…

DSA理解理解蓝桥杯例题signature

一、历史 1991年8月,NIST(Nation Institute of Standards and Technology,美国国家标准技术研究所)提出了数字签名算法(DSA)用于他们的数字签名标准(DSS)中。 DSA是算法&#xff0c…

C++的数据结构(四):队列

在数据结构中,队列(Queue)是一种特殊的线性表,只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列中没有元素时,称为空队列。队列的…

python数据分析——matplotlib可视化基础

参考资料:活用pandas库 # 导入库 import pandas as pd import matplotlib.pyplot as plt # 导入数据 anscombepd.read_csv(r"...\seaborn常用数据案例\anscombe.csv") anscombe.head() 大多数基本图表的名字以plt.plot开头。 # 创建数据子集 # 只包含数…

消息中间件Kafka(PHP版本)

小编最近需要用到消息中间件,有需要要复习一下以前的东西,有需要的自取,强调一点,如果真的想了解透彻,一定要动手,脑袋会了不代表就会写了 Kafka是由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅…

py黑帽子学习笔记_环境准备

1 下载os装os 下载一个kali虚机镜像然后用虚机管理软件创虚机,装完如下图,我用的版本是2024.1的版本kali-linux-2024.1-installer-amd64,可以从镜像站下载,官网下的慢还断网Index of /kali-images/kali-2024.1/ | 清华大学开源软…

AI 问答 API 对接说明

我们知道,市面上一些问答 API 的对接还是相对没那么容易的,比如说 OpenAI 的 Chat Completions API,它有一个 messages 字段,如果要完成连续对话,需要我们把所有的上下文历史全部传递,同时还需要处理 Token…

47岁古天乐唯一承认女友约「御用阿妈」过母亲节

日前关宝慧在IG晒出一张聚会照,并写道:「预祝各位#母亲节快乐🌹#dinner #happy #friends #好味」相中所见,前TVB金牌监制潘嘉德、卢宛茵、黄𨥈莹、黎萨达姆都有出席饭局。 当中黄𨥈莹身穿卡其色西装褛&…

【35分钟掌握金融风控策略24】定额策略实战

目录 基于客户风险评级的定额策略 确定托底额度和盖帽额度 确定基础额度 基于客户风险评级确定风险系数 计算最终授信额度 确定授信有效期 基于客户风险评级的定额策略 在开发定额策略时,精准确定客户的基础额度是一个关键步骤,通常会基于客户的收…

整体安全设计

人员和资产的安全是当今许多组织的最高优先事项之一。随着暴力事件在美国各地盛行——枪击事件、袭击、内乱等——建筑物业主必须为其建筑物及其居住者的安全做好计划。 为了创造一个安全的环境,新设施或园区的安全设计必须超越基本的摄像头和访问控制设备&#xf…

纯血鸿蒙APP实战开发——首页下拉进入二楼效果案例

介绍 本示例主要介绍了利用position和onTouch来实现首页下拉进入二楼、二楼上划进入首页的效果场景,利用translate和opacity实现动效的移动和缩放,并将界面沉浸式(全屏)显示。 效果图预览 使用说明 向下滑动首页页面超过触发距…

【Linux】centos7安装软件(rpm、yum、编译安装),补充:查找命令的相关文件路径,yum安装mysql

【Linux】技术上,Linux是内核。而术语上,我们通常说的Linux是完整的操作系统,其实称为"Linux发行版",是将Linux内核和应用系统打包,由不同的发行家族发行了不同版本。Linux发行版众多,主要有RedH…

HCIP-Datacom-ARST自选题库_07_割接【35道题】

一、单选题 1.在割接的测试阶段,符合以下哪一种情况的可以判断为割接成功? 网络承载的上层应用业务测试正常 网络设备的配置查看结果正常 网络流量路径正常 路由协议运行正常 2.在割接的测试阶段中,表明已经完成测试的标准是: IP设备的配置查看结…

org.postgresql.util.PSQLException: 错误: 关系 “dual“ 不存在

springboot 项目连接 postgreps,启动时报错 org.postgresql.util.PSQLException: 错误: 关系 "dual" 不存在。 查阅资料后发现这是由配置文件中的配置 datasource-dynamic-druid-validationQuery 导致的 spring:datasource:druid:stat-view-servlet:ena…

二叉树介绍

引入 定义 区别 定义不同 形态不同 基本形态

Ubuntu18.04解决有线网卡连接问题(不更新内核成功版)

https://www.realtek.com/Download/List?cate_id584 (需要翻一下) 不想自己去下载,直接去我资源里下载我上传的包就好啦(😂😂😂刚刚看了下别人下载要VIP还是自己去网站下很快的) 下载后解压,在…

FreeRTOS二值信号量

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

从零开始的软件测试学习之旅(七)接口测试流程及原则案例

接口测试三要素及案例 接口测试介绍接口预定义接口测试的主要作用测试接口流程如下接口测试三要素接口测试分类RESTful架构风格RESTful架构三要素要素一要素二要素三 RESTful架构风格实现restful架构案例接口测试流程接口测试原则功能测试自动化测性能测试 复习复盘 接口测试介…