只说实现,不讲原理
环境:VS2022 community版
0.先建立一个全局调用的主对话框的指针g_pMainThis;
1.建立一个基于对话框的MFC工程;
2.在预编译头文件“phc.h”或“stdafx.h”定义消息调用的宏,其值要“WM_USER+100”以上;
3.在主对话框类建立消息映射的功能实现函数;
4.建立一个子对话框;
5.在子对话框SendMessage;
1.建立一个基于对话框的MFC工程
工程名字叫做“MSGTest”
选择“基于对话框”
来到这个界面,把所有控件都删掉
0.建立一个方便调用的全局主窗口指针
建立完工程后会自动生成主对话框类“CMSGTestDlg”和App类“CMSGTestApp”,二者的头文件和cpp文件如下图所示,在“解决方案资源管理器”,先后对应的头文件为“MSGTestDlg.h”,“MSGTest.h”
来到主窗口cpp文件的构造函数之前(注意不是CAbout),建立一个全局指针“g_pMainThis”,并且在构造函数里使其指向主窗口(this)
然后来到App类的头文件处,先提前声明“g_pMainThis”
在这之后,你可以在其他类,只要包含了App类头文件“MSGTest.h”的,你就可以使用这个指针“g_pMainThis”
2.自定义消息的第一步,就是你要在预编译头文件(该文件自动生成“pch.h”或“stdafx.h”在解决方案资源管理器里找)定义你的消息宏,这个宏的值要在WM_USER+100以上,我这里直接加1000,#define T_MYMSG WM_USER+1000
3.回到主对话框类,建立响应消息的函数
头文件这样写,注意其函数的类型和参数,除了函数名你自己定义,其他的都得这样写,不然消息映射的时候会出错,注意定义要在DECLARE_MESSAGE_MAP()之前
cpp文件这样写,写完函数功能的实现(其功能是会弹出传入的两个参数),再将消息与函数绑定,在BEGIN_MESSAGE_MAP里用ON_MESSAGE
4.建立一个子对话框,然后使用SendMessage来调用主对话框刚刚创建的函数
在“资源视图”右键Dialog,选择插入,这里直接是“IDD_DIALOG1”
然后给它添加一个对话框类,在对话框处右键“添加类”,类名是“Dlg1”
然后在添加一个按钮“Button1”,在“工具箱”视图添加按钮控件,然后双击进入cpp为其添加功能
为Button1添加发送消息的功能,由于该cpp包含了app的头文件“MSGTest.h”,所以我们可以直接使用之前创建的主窗口指针,SendMessage的参数含义是(目的窗口的句柄,自定义的消息宏,第一个传递值,第二个传递值)
5.做完了这些还需要在主对话框将子窗口显示,我们可以添加一个按钮,然后当点击按钮时将子对话框显示
将“Dlg1.h”包含到主对话框cpp
然后在按钮实现函数将Dlg1显示
6.点击运行,结果,弹出的消息值与子窗口传递的一样
文章来源:https://www.toymoban.com/news/detail-506048.html
至此完结。文章来源地址https://www.toymoban.com/news/detail-506048.html
到了这里,关于MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!