MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

这篇具有很好参考价值的文章主要介绍了MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

只说实现,不讲原理
环境:VS2022 community版
0.先建立一个全局调用的主对话框的指针g_pMainThis;
1.建立一个基于对话框的MFC工程;
2.在预编译头文件“phc.h”或“stdafx.h”定义消息调用的宏,其值要“WM_USER+100”以上;
3.在主对话框类建立消息映射的功能实现函数;
4.建立一个子对话框;
5.在子对话框SendMessage;

1.建立一个基于对话框的MFC工程

MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
工程名字叫做“MSGTest”
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
选择“基于对话框”
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
来到这个界面,把所有控件都删掉
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

0.建立一个方便调用的全局主窗口指针

建立完工程后会自动生成主对话框类“CMSGTestDlg”和App类“CMSGTestApp”,二者的头文件和cpp文件如下图所示,在“解决方案资源管理器”,先后对应的头文件为“MSGTestDlg.h”,“MSGTest.h”

MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
来到主窗口cpp文件的构造函数之前(注意不是CAbout),建立一个全局指针“g_pMainThis”,并且在构造函数里使其指向主窗口(this)
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
然后来到App类的头文件处,先提前声明“g_pMainThis”

MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
在这之后,你可以在其他类,只要包含了App类头文件“MSGTest.h”的,你就可以使用这个指针“g_pMainThis”

2.自定义消息的第一步,就是你要在预编译头文件(该文件自动生成“pch.h”或“stdafx.h”在解决方案资源管理器里找)定义你的消息宏,这个宏的值要在WM_USER+100以上,我这里直接加1000,#define T_MYMSG WM_USER+1000

MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

3.回到主对话框类,建立响应消息的函数

头文件这样写,注意其函数的类型和参数,除了函数名你自己定义,其他的都得这样写,不然消息映射的时候会出错,注意定义要在DECLARE_MESSAGE_MAP()之前
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
cpp文件这样写,写完函数功能的实现(其功能是会弹出传入的两个参数),再将消息与函数绑定,在BEGIN_MESSAGE_MAP里用ON_MESSAGE
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

4.建立一个子对话框,然后使用SendMessage来调用主对话框刚刚创建的函数

在“资源视图”右键Dialog,选择插入,这里直接是“IDD_DIALOG1”
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
然后给它添加一个对话框类,在对话框处右键“添加类”,类名是“Dlg1”
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
然后在添加一个按钮“Button1”,在“工具箱”视图添加按钮控件,然后双击进入cpp为其添加功能
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
为Button1添加发送消息的功能,由于该cpp包含了app的头文件“MSGTest.h”,所以我们可以直接使用之前创建的主窗口指针,SendMessage的参数含义是(目的窗口的句柄,自定义的消息宏,第一个传递值,第二个传递值)
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

5.做完了这些还需要在主对话框将子窗口显示,我们可以添加一个按钮,然后当点击按钮时将子对话框显示

MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
将“Dlg1.h”包含到主对话框cpp
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
然后在按钮实现函数将Dlg1显示
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

6.点击运行,结果,弹出的消息值与子窗口传递的一样

MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现
MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

至此完结。文章来源地址https://www.toymoban.com/news/detail-506048.html

到了这里,关于MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MFC为资源对话框添加消息处理函数和初始化控件

    现在我VC6新建了一个对话框工程;又在资源添加了一个新的对话框,并为新的对话框添加了名为CTestDlg的类; 在主对话框的cpp文件包含#include \\\"TestDlg.h\\\"; 在主对话框的cpp文件的OnInitDialog()成员函数中,添加2句,     CTestDlg tdlg;     tdlg.DoModal(); 就可以弹出这个对话框; 在新

    2024年01月18日
    浏览(49)
  • C++ lambda表达式函数递归调用简单写法实现

    在C++11中,lambda表达式函数递归往往会带上 functional 头文件。书写形式如下: 还有相对简单点的第二种写法(C++14): 对于第二种, auto fib 的作用是为了在 lambda 表达式内部能够递归调用自身。在 C++14 中,lambda 表达式默认是无法直接递归调用的,因为在 lambda 内部无法访问到

    2024年02月15日
    浏览(50)
  • MFC 非线程创建模态化窗口 实现工具栏拓展

    1.1 在Dlg.h文件中声明变量和定义资源ID 1.2 在资源视图中导入Bitmap资源图片 可以在右击资源符号中查看具体ID值 1.3 在Dlg.cpp文件中的OnInitDialog()方法中导入Bitmap与按钮ID 1.4 开启鼠标停靠信息提示 先在Dlg.h中增加函数声明 再Dlg.cpp中实现 增加消息映射宏开启提示 1.5 效果呈现 2.

    2024年02月10日
    浏览(37)
  • VS2015项目中,MFC内存中调用DLL函数(VC6生成的示例DLL)

    本例主要讲一下,用VC6如何生成DLL,用工具WinHex取得DLL全部内容,VC2015项目加载内存中的DLL函数,并调用函数的示例。         本例中的示例代码下载,点击可以下载 1.新建项目,这里选择Win32 Dynamic-link Library,如下图:  2.选择“A simple DLL project”,然后点击完成,如下:

    2024年02月12日
    浏览(46)
  • 【vim 学习系列文章 19 -- 映射快捷键调用两个函数 A 和B】

    请阅读 【嵌入式开发学习必备专栏 之 Vim】 在 Vim 中,如果想通过按下 gcm 来调用两个函数,比如 FunctionA 和 FunctionB ,需要先定义这两个函数,然后创建一个映射。这个映射将会在被触发时依次调用这两个函数。 首先,确保 .vimrc 文件中包含了这两个函数的定义,以及一个用

    2024年04月13日
    浏览(61)
  • FreeRTOS中断调用API消息队列发送函数导致系统死机(memcpy函数卡死)

    背景:写一组在FreeRTOS系统下的串口驱动 ,芯片使用的是杰发科的 AC781x系列 , ARM® CortexM3 内核,96MHz主频。 项目场景:计划使用dma接收数据,设置dma半满中断与全满中断,在半满中断中把前半部分数据传入消息队列,在全满中断中把后半部分数据传入消息队列。 问题1: 在中

    2024年02月15日
    浏览(46)
  • VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条

    利用MFC的CWindowDC类实现画线功能 先介绍一个MFC类:CWindowDC,这个类也派生于CDC类,并且在构造时调用GetWindowDC函数获得相应的设备描述表对象,在析构时调用ReleaseDC函数释放该设备描述对象所占用的资源。也就是说,当我们利用CWindowDC对象绘图时,也不需要显式地调用GetDC和

    2023年04月23日
    浏览(47)
  • 【学习笔记】unity脚本学习(五)【常用的方法函数Destroy、Instantiate 、SendMessage、invoke 、Coroutine】

    转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/130233098 视频参考 极客学院Unity3D视频精讲课程 Object体系结构 可以看到MonoBehaviour继承自Component,Component继承自Object MonoBehaviour复习 MonoBehaviour官网API 之前学的start awake等都是Message事件响应函数,它们都是我们在脚本

    2024年02月04日
    浏览(44)
  • 【MFC】实现简单UDP通信

    创建一个基于对话框的MFC项目(名称为UDP),高级功能选中Windows套接字 这个时候在CUDP类的InitInstance()方法中就会出现这样的代码用来初始化套接字 如果没有选中,手动添加也是可以的。 控件ID 关联变量名 类型 作用 IDC_EDIT1 m_edit CEdit 显示接收到的信息 IDC_EDIT2 m_msg CString 保存

    2024年02月09日
    浏览(37)
  • RISC-V基础之函数调用(一)简单的函数调用(包含实例)

    高级语言支持函数(也称为过程或子程序)来重用通用的代码,以及使程序更加模块化和可读。函数可以有输入,称为参数,和输出,称为返回值。函数应该计算返回值,并且不产生其他意外的副作用。 在一个函数调用另一个函数时,调用者(caller)和被调用者(callee)必须

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包