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:对话框之间的数据传递。

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

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

相关文章

敏捷开发07:敏捷项目可视化管理-ScrumBoard(Scrum板)使用介绍

ScrumBoard(Scrum板)介绍 ScrumBoard(Scrum板)是敏捷项目管理中使用的可视化工具,用于跟踪和监控冲刺阶段的任务进度。 主要通过可视化的看板来管理工作,它可视化了敏捷开发中的工作流程、任务状态、团队角色。 Scrum 团队在各…

【每日八股】Redis篇(一):概述

Redis 为什么快? 一句话概括: Redis 之所以快,主要是因为它是基于内存操作的,避免了磁盘 I/O 的开销;采用单线程模型,避免了上下文切换和锁竞争;使用了高效的数据结构和紧凑的编码方式&#xf…

蓝桥杯——按键

一:按键得原理图 二:按键的代码配置 step1 按键原理图对应引脚配置为输入状态 step2 在GPIO中将对应引脚设置为上拉模式 step3 在fun.c中写按键扫描函数 写完后的扫描函数需放在主函数中不断扫描 扫描函数主要通过两个定义变量的值来判断&#xf…

语音控制热水器WTK69000离线语音识别芯片方案:迈向智能家居新时代

一、开发背景 在传统热水器使用中,人们往往需要手动调节水温、选择模式,这不仅操作繁琐,而且容易因误操作导致不必要的能源浪费。为了改善这一现状,热水器厂商开始引入语音识别技术。通过语音识别芯片,热水器能够准确识…

演示基于FPGA的视频图像去雾处理效果

我近期用FPGA开发板做了一个视频图像去雾算法模块,用于验证其能否在不进行帧缓冲的情况下实现去雾功能。 去雾算法来自一篇技术资料(私信提供篇名),其基础是近似的大气光模型。 1 算法原理概要 借助RGB直角坐标空间中的光矢量分…

UE_C++ —— Gameplay Tags

目录 一,Defining Gameplay Tags Adding Tags in Project Settings Importing Tags from Data Table Assets Defining Tags with C 二,Using Defined Gameplay Tags Applying Tags to Objects Evaluating Tags with Conditional Functions 三&am…

计算机视觉算法实战——三维重建(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 1. 三维重建领域简介 三维重建(3D Reconstruction)是计算机视觉的核心任务之一,旨在通过多视角图像、视频…

Spring5框架八:整合Mybatis

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 1、导入相关的jar包 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>…

AI学习第一天-什么是AI

AI的发展可以被分为四次浪潮&#xff0c;这包括符号主义、机器学习与神经网络&#xff0c;以及深度学习。在这些发展中&#xff0c;深度学习凭借其在处理非结构化复杂数据、强大的学习能力和可解释性方面的优势备受关注。深度学习技术的应用不仅提升了AI系统的性能&#xff0c;…

redis-bitmap使用场景

bitmap原理 Bitmap&#xff08;位图&#xff09;是一种基于二进制位的数据结构&#xff0c;用于高效地存储和操作大量的布尔值 可以对单个位进行读写操作 demo package org.example;import org.redisson.Redisson; import org.redisson.api.RBitSet; import org.redisson.ap…

华为 网络安全 认证

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 华为 网络安全 认证&#xff1a;保障信息安全的重要一环 在数字化时代的今天&#xff0c;网络安全成为了企业和个人都需要高度重视的问题。尤其是在企业信息化的…

ubuntu22.04连接github无法访问的问题

目录 说明安装 说明 此方案只针对虚拟机, 如果是云服务器(毕竟是官方维护, github还是能访问到的)多试几次肯定能够访问到的. 国内我们无法访问外网, 所以我们目前能够访问外网的途径基本上只能开佳速器. 所以我们需要选择一款加速器来帮助我们访问外网, 目前市面上很多佳速器…

【Research Proposal】基于提示词方法的智能体工具调用研究——难点

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;一、难点分析1. 提示词方法的多样性和组合问题2. 智能体工具调用的准确性和效率问题3. 多模态任务中的复杂性问题 &#x1f4af;二、解决思路与策略&#x1f…

Linux搭建Nginx直播流媒体服务RTMP/RTSP转Http-flv视频浏览器在线播放/Vue/Java/ffmpeg

参考文章&#xff1a; https://blog.csdn.net/whatareyouding/article/details/144317654 https://www.cnblogs.com/Gredae/p/18362900 https://www.cnblogs.com/kn-zheng/p/17422707.html https://blog.51cto.com/u_16099344/10281495 https://www.tulingxueyuan.cn/tlzx/jsp…

智慧教室与无纸化同屏技术方案探讨与实现探究

引言 随着教育信息化的不断发展&#xff0c;智慧教室和无纸化同屏技术逐渐成为提升教学效率和质量的重要手段。大牛直播SDK凭借其强大的音视频处理能力和丰富的功能特性&#xff0c;在智慧教室和无纸化同屏领域积累了众多成功案例。本文将深入探讨基于大牛直播SDK的智慧教室、…

自制操作系统前置知识汇编学习

今天要做什么&#xff1f; 为了更好的理解书中内容&#xff0c;需要学习下进制分析和汇编。 汇编语言其实应该叫叫机器指令符号化语言&#xff0c;目前的汇编语言是学习操作系统的基础。 一&#xff1a;触发器 电路触发器的锁存命令默认是断开的&#xff0c;是控制电路触发器…

嘉立创EDA一自画元件及其封装

目录 一、创建元件 &#xff08;1&#xff09;新建元件。 &#xff08;2&#xff09;绘制元件。 二、绘制封装 &#xff08;1&#xff09;新建封装。 &#xff08;2&#xff09;绘制封装。 三、关联元件与封装 四、封装设计注意事项 在嘉立创&#xff08;JLCPCB&#xff…

《深度学习实战》第2集-补充:卷积神经网络(CNN)与图像分类 实战代码解析和改进

以下是对《深度学习实战》第2集中 CIFAR-10 数据集 使用卷积神经网络进行图像分类实战 代码的详细分析&#xff0c;并增加数据探索环节&#xff0c;同时对数据探索、模型训练和评估的过程进行具体说明。所有代码都附上了运行结果配图&#xff0c;方便对比。 《深度学习实战》第…

dataframe如何在末尾添加多行

如果要在pandas的dataframe中添加多行该如何实现&#xff1f;可通过以下常见方式在DataFrame末尾添加&#xff1a; ### 方法一&#xff1a;使用loc索引器 利用loc索引器分两次操作来添加两行数据。假设已有DataFrame对象df&#xff0c;要添加的两行数据分别存储在字典new_row…

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中&#xff0c;可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;结合 Typora 快速生成流程图和甘特图&#xff0c;并通过 Markdown 格式生成思维导图&#xff0c;最终…