用PostMessage实现二个窗口可以互相发送信息显示

前言

作者:小蜗牛向前冲

名言:我可以接受失败,但我不能接受放弃

  如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正

目录

一、案例解析

二、模态对话框和非模态对话框

1、模态对话框

2、非模态对话框

三、消息映射机制

1、基本概念

2、用法

四、PostMessage和SendMessage的区别

1、PostMessage函数

 2、SendMessage函数

五、案例实现

1、基于对话框创建好项目

 2、为子对话框创建类

 3、完成主窗口的点击事件

3.1、点击了openDlg

3.2、点击closeDlg 

3.3、点击发送信息 

3.4、处理接受来自子窗口的消息

4、完成子窗口的点击事件


博主最近在学习MFC,简单记录下我的学习过程。

下面我们将学习模态对话框和非模态对话框,消息映射机制,消息传递函数PostMessage和SendMessage函数

一、案例解析

下面我们要完成这个案例如下:

 案例非常清晰,就是建立一个主对话框和一个测试对话框,在主对话框中当我们当前openDlg按键,就弹出子测试对话框,点击closeDlg按键就关闭子对话框,有一个编辑框和按键用来显示信息和发送消息。测试窗口要能接受到主窗口发送的信息显示在编辑框中,自己也能发送信息。通过PostMessage函数完成

为了完成这个小练习,我们需要了解下面的知识

二、模态对话框和非模态对话框

1、模态对话框

模态对话框是一种阻塞式对话框,即用户必须与对话框进行交互并关闭对话框,才能返回到应用程序的主窗口或其他界面。

模态对话框被创建后,就只能操作本窗口,其他窗口都无法操作

CMyDialog dlg;
dlg.DoModal();  // 使对话框模态化,程序会在此阻塞,直到对话框关闭

 这里就是创建一个对话框,然后通过DoModal函数调用显示对话框。

2、非模态对话框

非模态对话框是一种非阻塞式对话框,即用户可以在不关闭对话框的情况下继续与应用程序的其他部分交互

非模态对话框被创建后,可以操作其他窗口。

CMyDialog* pDlg = new CMyDialog;
pDlg->Create(IDD_MY_DIALOG, this);  // 使用 Create 创建非模

这里是先new一个对话框,通过指针pDlg,调头Create创建出非模态对话框。其中IDD_MY_DIALOG这个是对话框的ID,自己可以定义的

三、消息映射机制

1、基本概念

在 Windows 编程中,消息是操作系统或应用程序之间传递的一种通知,表示某种事件或状态的变化。MFC 使用消息映射机制将消息响应函数(即处理函数)连接起来。当某个消息到达应用程序时,框架会自动找到与该消息对应的函数,并执行它。

简单的来说,就是当某个控件在点击或者在某种情况下触发了消息,MFC就会在映射表中去找于这个消息绑定的相应函数去执行。

2、用法

对于消息映射机制的用法:

首先就是在.h文件中定义好响应函数和定义好自定义的消息(具体参考PostMessage函数)。

对于响应函数的格式

afx_msg <返回值类型> <函数名>(<参数类型1> param1, <参数类型2> param2, ...);
afx_msg LRESULT <函数名>(WPARAM wParam, LPARAM lParam);//大多数情况的定义

 大多数情况都是上面的第二种情况。

  • afx_msg是一个宏

用来告诉编译器这个函数是,消息映射函数,用消息映射机制去处理这个函数。

  • LRESULT是返回类型

他是一个长整型(long),一般的消息处理函数的返回值是这个。例如,对于 WM_SETTEXT 消息,返回 0 表示消息已成功处理。

  • <函数名>给函数起名字

一般都是以On开头,后接消息类型或事件名称。例如,OnButtonClicked

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蜗牛~向前冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值