前言
作者:小蜗牛向前冲
名言:我可以接受失败,但我不能接受放弃
如果觉的博主的文章还不错的话,还请
点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正
目录
博主最近在学习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
、