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

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.kler.cn/a/558610.html

相关文章:

  • AI 颠覆传统:当遥感影像分析进入“智能体对话时代”
  • 【算法】滑动窗口(上)
  • 使用 DeepSeek 和 ECharts 实现大屏数据可视化
  • Docker+Dify部署DeepSeek-r1本地知识库
  • PolyOS 是面向 RISC-V 架构的智能终端和 AIoT 开源操作系统(基于开源鸿蒙)
  • 便携式动平衡仪Qt应用层详细设计说明书
  • uni-app 系统学习,从入门到实战(一)—— 从零开始搭建第一个跨平台应用
  • 谁会是“下一个DeepSeek?”——从技术路线与生态逻辑看AI大模型的未来格局
  • 几道感知机算法(PLA)的例题
  • 数字电子技术基础(二十一)——双极型三极管的开关特性
  • 具备批量卸载、精准搜索等功能的应用工具
  • 愿在线段树中搁浅
  • DataX 抽取 MySQL 数据教程
  • 计算机视觉基础 | 数据增强黑科技——MixUp
  • Kubernetes 中服务注册机制解析:自动化与灵活性的背后
  • 【数据结构】快指针和慢指针
  • k8s部署针对外部服务器的prometheus服务
  • CentOS中shell脚本对多台机器执行下载安装
  • C#初级教程(4)——流程控制:从基础到实践
  • Python中的转义字符