当前位置: 首页 > news >正文

【05】MFC入门到精通——MFC 为对话框中的控件添加变量 和 数据交换和检验

文章目录

  • 四、 为对话框中的控件添加变量
  • 五、对话框类的
    • 5.1 为编辑框添加变量

面步骤中 为对话框添加了几个控件,包括三个静态文本框,三个编辑框,一个按钮控件。

四、 为对话框中的控件添加变量

编辑框中的数据可能会经常变化,有必要为它们每个控件关联一个变量。

首先为被加数的编辑框 IDC_SUMMAND_EDIT 添加变量。

  1. 在编辑框上点右键,在右键菜单中选择“Add Variable”。弹出添加成员变量的向导对话框。

2 .我们想为其添加值变量而不是控件变量,所以对话框中“Category”下的组合框中选择Value。

  1. “Variable type”下的组合框此时默认选中的是“CString”,CString是字符串类,显然不能进行加法运算。我们可以选择double、float、int等。这里我们选择double,即编辑框关联一个double类型的变量。

  2. 在“Variable name”中写入自定义的变量名。为其取名m_editSummand。

在这里插入图片描述
在这里插入图片描述
5.点“Finish”完成。

注意,类的成员变量名一般以m_打头,以标识它是一个成员变量。

参照此方法,再分别为加数的编辑框IDD_ADDEND_EDIT添加double型变量m_editAddend、和的编辑框IDD_SUM_EDIT添加double型变量m_editSum。

添加完成后,可以再 **Dlg.h头文件中看到,刚才添加的三个变量;
在这里插入图片描述
**Dlg.cpp文件中可以看到CAdditionDlg()函数中U盾哦了三个变量的并初始化。

**Dlg.cpp文件中可以看到:DoDataExchange()函数的函数体中多了三条DDX_Text调用语句,用于数据交换。
在这里插入图片描述

五、对话框类的

在程序运行界面中,用户往往会改变控件的属性,例如,在编辑框中输入字符串,或者改变组合框的选中项,又或者改变复选框的选中状态等。控件的属性改变后MFC会相应修改控件关联变量的值。这种同步的改变是通过MFC为对话框类自动生成的成员函数DoDataExchange()来实现的,这也叫做对话框的数据交换和检验机制。

5.1 为编辑框添加变量

我们为三个编辑框添加了变量以后,在AdditionDlg.cpp 中 CAdditionDlg 的 DoDataExchange()函数的函数体中多了三条DDX_Text调用语句。下面是函数体代码和添加的注释。

在这里插入图片描述
再以 Addition 程序为例简单说下数据交换机制。如果我们在程序运行界面中输入被加数,则通过CAddition的DoDataExchange()函数可以将输入的值保存到 m_editSummand 变量中,反之如果程序运行中修改了变量 m_editSummand 的值,则通过 CAddition 的 DoDataExchange() 函数也可以将新的变量值显示到被加数的编辑框中。

但是这种数据交换机制中,DoDataExchange() 并不是被自动调用的,而是需要我们在程序中调用 CDialogEx::UpdateData()函数,由 UpdateData() 函数再去自动调用 DoDataExchange()的。

CDialogEx::UpdateData() 函数的原型为: BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

参数:bSaveAndValidate 用于指示数据传输的方向,TRUE 表示从 控件 传给 变量,FALSE 表示从 变量 传给 控件。默认值是 TRUE,即从 控件 传给 变量。

UpdateData(true);//把编辑框中的数值传到m_editSummand中,括号内缺省值为true
UpdateData(false);//把m_editSummand的值传递到编辑框中并显示

返回值:CDialogEx::UpdateData()函数的返回值表示操作是否成功,成功则返回TRUE,否则返回FALSE。

在下一讲中将具体演示CDialogEx::UpdateData()函数如何使用。

本节主要讲的是新建对话框类和添加控件变量,控件的消息处理函数将在下一讲详细介绍。

http://www.dtcms.com/a/271052.html

相关文章:

  • 【01】MFC入门到精通—— MFC新建基于对话框的项目 介绍(工作界面、资源视图 、类视图)
  • Flink-1.19.0源码详解6-JobGraph生成-后篇
  • AJAX总结
  • Flink1.20.1集成Paimon遇到的问题
  • Electron 应用打包全指南
  • 机器学习模型在C++平台的部署
  • 基于 Redis 实现高并发滑动窗口限流:Java实战与深度解析
  • 开始读 PostgreSQL 16 Administration Cookbook
  • 深度学习 最简单的神经网络 线性回归网络
  • ArtifactsBench: 弥合LLM 代码生成评估中的视觉交互差距
  • 论文解析篇 | YOLOv12:以注意力机制为核心的实时目标检测算法
  • 腾讯云COS,阿里云OSS对象存储服务-删除操作的响应码204
  • 汽车智能化2.0引爆「万亿蛋糕」,谁在改写游戏规则?
  • 通用游戏前端架构设计思考
  • VSCode配置Cline插件调用MCP服务实现任务自动化
  • 旅游管理实训室建设的关键要点探讨
  • 向量空间 线性代数
  • 软件测试偏技术方向学习路线是怎样的?
  • 安装nvm管理node.js,详细安装使用教程和详细命令
  • Spring Boot微服务中集成gRPC实践经验分享
  • 【每日算法】专题六_模拟
  • 全球发展币GDEV:从中国出发,走向全球的数字发展合作蓝图
  • 2 STM32单片机-蜂鸣器驱动
  • 【vLLM 学习】Eagle
  • oracle ocp题库有多少道题,以及题库背诵技巧
  • Context Engineering:从Prompt Engineering到上下文工程的演进
  • 破局电机制造四大痛点:MES与AI视觉的协同智造实践
  • 基于SD-WAN的管件制造数字化产线系统集成方案
  • 中山排气歧管批量自动化智能化3D尺寸测量及cav检测分析
  • 什么是幂等