Windows程序设计29:对话框之间的数据传递

文章目录

  • 前言
  • 一、父子对话框之间的数据传递
    • 1.父窗口获取子窗口数据
    • 2.子窗口获取父窗口数据
  • 二、类外函数调用窗口的操作
    • 1.全局变量方式
    • 2.参数传递方式
  • 总结


前言

Windows程序设计29:对话框之间的数据传递。


在Windows程序设计28:MFC模态与非模态对话框中通过点击主对话框上的按钮创建了子对话框。那么在对话框创建出来之后,就涉及到了父子对话框或者兄弟对话框之间数据的传递。

一、父子对话框之间的数据传递

1.父窗口获取子窗口数据

由于是父窗口创建的子窗口,因此父窗口获取子窗口的数据(窗口句柄或者窗口指针等)较为简单。
根据上述链接中的代码,在主对话框(父窗口)中点击按钮创建子窗口(模态和非模态对话框),那么子窗口的窗口对象在主对话框中很方便就可以获取到,如下图红框部分
在这里插入图片描述
可以直接对非模态对话框修改其编辑框内的内容,表示可以在父窗口中利用子窗口的窗口句柄
在这里插入图片描述
得到如下结果
在这里插入图片描述

但是无法在模态对话框中进行修改编辑框的内容。这是因为即便父窗口仍然能够得到模态对话框的实例句柄,但是DoModal不像Create那样直接创建了窗口,确保了控件的有效性。即调用DoModal之前还不存在模态对话框实例(如果不存在窗口实例而调用其内部方法会出现断言失败),而在调用DoModal之后程序还会阻塞,因此无法进行修改。
在这里插入图片描述
会发生断言失败
在这里插入图片描述

2.子窗口获取父窗口数据

但是反过来,子窗口获取父窗口的数据有些复杂。因为子窗口中默认是没用父窗口的窗口句柄的。
为了演示方便,在父窗口(主对话框)上也加一个编辑框控件
在这里插入图片描述
想要实现的功能为当关闭子窗口时,将子窗口中编辑框内的内容放到父窗口的编辑框上。
有多种方法获取父窗口数据,第一种为利用GetParent函数直接获取父窗口指针
在这里插入图片描述
获取成功
在这里插入图片描述
此外,还可以通过利用extern设置全局变量(将父窗口的指针设置为全局变量)来在子窗口中访问父窗口的指针。
声明全局变量:
在这里插入图片描述
初始化全局变量
在这里插入图片描述
直接可以在子窗口的源文件中使用
在这里插入图片描述
同样成功
在这里插入图片描述

此外,还有第三种方法:App类获取法。在主线程的源文件中,将主对话框类的实例赋值给了主线程类的m_pMainWnd对象,即该线程的主窗口。因此我们只要把这个变量拿过来使用即可,利用函数AfxGetApp()获取当前的主线程指针。
在这里插入图片描述
取得主线程指针
在这里插入图片描述
运行成功
在这里插入图片描述

二、类外函数调用窗口的操作

为了演示方便,在主对话框上再添加一个按钮3控件,并设置其点击消息响应函数
在这里插入图片描述
想要在类外函数GetEdit内调用一些主对话框类上编辑框等一些控件的操作,主要有两种方法
在这里插入图片描述

1.全局变量方式

将需要使用的变量设置为全局变量即可在函数中使用,与子窗口访问父窗口的全局变量方法类似,这里不再赘述。

2.参数传递方式

参数传递方式主要思想为利用主对话框类的this指针,将主对话框类的this指针作为参数传递到函数中
在这里插入图片描述
成功实现
在这里插入图片描述
这里需要说明一点:指针的相互转换
利用窗口指针(CWnd*)获取窗口句柄(HWND)

HWND hDlg = pDlg->GetSafeWnd();

利用窗口句柄(HWND)获取窗口指针(CWnd*)

CWnd* pWnd = CWnd::FromHandle(hDlg);

总结

Windows程序设计29:对话框之间的数据传递。

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

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

相关文章

【C语言】第八期——指针

目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…

为 Power Automate 注册 Adobe PDF Services

前言 最近,再测试如何将HTML转换成PDF,然后发现Adobe有一个免费的操作可以用,好开心,赶紧注册一下。 正文 1.先注册一个账号,然后登录到Adobe Developer 注册链接:https://www.adobe.com/go/getstarted_pow…

BY组态:工业自动化的未来,触手可及

1. BY组态软件的核心优势 简单易用:图形化界面,降低学习成本,快速上手。 高效灵活:支持多种设备协议,兼容性强,适用于多种行业。 实时监控:提供实时数据采集与可视化,助力高效决策…

有哪些开源大数据处理项目使用了大模型

以下是一些使用了大模型的开源大数据处理项目: 1. **RedPajama**:这是一个开源项目,使用了LLM大语言模型数据处理组件,对GitHub代码数据进行清洗和处理。具体流程包括数据清洗、过滤低质量样本、识别和删除重复样本等步骤。 2. …

网络安全之攻防笔记--通用安全漏洞SQL注入sqlmapOraclemongodbDB2

通用安全漏洞SQL注入&sqlmap&Oracle&mongodb&DB2 数据库类型 ACCESS 特性 没数据库用户 没数据库权限 没数据库查询参数 没有高权限注入说法 暴力猜解,借助字典得到数据 注入方式 联合注入 偏移注入 表名列名猜解不到 偏移注入 MySQL 低权限 常…

【信息系统项目管理师-案例真题】2022下半年案例分析答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一(24分)【问题1】(6分)【问题2】(10分)【问题3】(8分)试题二(26分)【问题1】(8分)【问题2】(8分)【问题3】(4分)【问题4】(6分)试题三(25分)【问题1】(12分)【问题2】(7分)【问题…

正点原子[第三期]Arm(iMX6U)Linux系统移植和根文件系统构建-5.3 xxx_defconfig过程

前言: 本文是根据哔哩哔哩网站上“arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用: …

C++初阶——简单实现list

目录 1、前言 2、List.h 3、Test.cpp 1、前言 1. 简单实现std::list,重点:迭代器,模板类,运算符重载。 2. 并不是,所有的类,都需要深拷贝,像迭代器类模板,只是用别的类的资源&am…

conda环境中运行“python --version“所得的版本与环境中的python版本不一致----deepseek并非全能

conda环境中运行python —version所得python版本与conda环境中的python版本不一致------deepseek并非全能 问题 conda环境中运行python —version所得python版本与conda环境中的python版本不一致 我所做的探索 1 网页搜索 2 求助于DeepSeek 可以用四个字来形容deepseek给出…

HarmonyOS学习第5天: Hello World的诞生之旅

鸿蒙初印象:开启探索之门 在操作系统的广袤天地中,HarmonyOS(鸿蒙系统)宛如一颗冉冉升起的新星,自诞生起便备受瞩目。它由华为倾力打造,是一款基于微内核的全场景分布式操作系统,以其独特的技术…

centos9安装k8s集群

以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安装流程(containerd版): 一、系统初始化(所有节点执行) # 关闭防火墙 systemctl disable --now firewalld# 关闭SELinux sed -i "s/SELINUXenforcing/SELINU…

CIG容器重量级监控系统

1.介绍 CAdvisorinfluxDBGranfana docker 原生命令 监控docker容器状态 docker stats 2.CAdvicsor 3.InfluxDB 4.Granafana 5.搭建 volumes:grafana_data: services:influxdb:image: tutum/influxdbrestart: alwaysenvironment:- PRE_CREATE_DBcadvisorports:- "8083…

REACT学习DAY02(恨连接不上服务器)

受控表单绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 1. 准备一个React状态值 const [value,setValue] useState() 2. 通过value属性绑定状态&#xff0c;通过onChange属性绑定状态同步的函数 <input type"text&quo…

python——GUI图形用户界面编程

GUI简介 我们前面实现的都是基于控制台的程序&#xff0c;程序和用户的交互通过控制台来完成 本章&#xff0c;我们来学习GUI图形用户界面编程&#xff0c;我们可以通过python提供的丰富的组件&#xff0c;快速的视线使用图形界面和用户交互 GUI变成类似于“搭积木”&#x…

DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

美颜相机1.0

项目开发步骤 1 界面开发 美颜相机界面构成&#xff1a; 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意&#xff1a;此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…

openharmony中hdf框架的驱动消息机制的实现原理

openharmony中hdf框架的驱动消息机制的实现原理 在分析hdf框架时发现绕来绕去的&#xff0c;整体梳理画了一遍流程图&#xff0c;发现还是有点模糊甚至不清楚如何使用的&#xff0c;详细的每个点都去剖析细节又过于消耗时间&#xff0c;所以有时间便从功能应用的角度一块块的去…

leaflet实现历史轨迹播放效果

效果图如下&#xff1a; 效果实现&#xff1a; 1、添加完整轨迹线&#xff0c;蓝色的 this.echoLine L.polyline(points, { weight: 8 }).addTo(this.map) 2、添加实时轨迹线&#xff0c;初始状态置空 this.realEchoLine L.polyline([], { weight: 12, color: "#FF9…

JAVAEE一>Spring IoC和DI详解

目录 Spring容器说明&#xff1a;Ioc容器优势&#xff1a;DI介绍&#xff1a;从Spring获取对象&#xff1a;获取对象的方法&#xff1a;关于上下文的概念&#xff1a; Controller注解&#xff08;控制层&#xff1a;接收参数并响应&#xff09;&#xff1a;Service注解&#xf…

(四)趣学设计模式 之 原型模式!

目录 一、 啥是原型模式&#xff1f;二、 为什么要用原型模式&#xff1f;三、 原型模式怎么实现&#xff1f;四、 原型模式的应用场景五、 原型模式的优点和缺点六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xf…