2022/11/06
自定义消息是我们在MFC中经常使用的处理手段。有时候我们会在MFC框架中使用线程来执行某些业务,但是一些涉及到Dlg类的操作不方便在线程中操作,这个时候就需要从线程中触发自定义消息来执行某些操作。如相机传感器的开发中,在采集线程中发生相机断线事件,通常断线重连操作不能直接在采集线程中执行,这时就需要触发自定义的断线重连消息来执行断线重连操作了。
创建自定义消息:
创建自定义消息共分四步。
-
在Dlg.h中定义想要创建的自定义消息,注意WM_USER+n,n要>8。
-
打开项目的类向导。
-
选择到Dlg类的消息选项后点击自定义消息。
-
输入自定义的消息名后点击确定(笔者未实验勾选“已注册的消息”的效果,若有读者知道可以在下方评论)。
-
现有处理程序中会出现刚刚自定义消息的处理函数,选择编辑代码即可自定义消息响应函数。
此时已经完成了自定义消息的创建。接下来是如何触发自定义消息。
触发自定义消息:
触发自定义消息只需要向MFC传递这个消息即可,在需要触发的地方插入如下代码。其中pDlg->m_hWnd
是当前Dlg类的指针对象,需要按自己的实际修改。
代码为:
::SendMessage(pDlg->m_hWnd, WM_TEST, 0, 0);
以下是我自己对MFC消息响应机制的理解,若有错误欢迎指正。
- MFC消息响应机制响存在延时问题,在触发自定义消息函数时如果触发消息的线程需要等待一个响应处理结果才能继续工作,则建议搭配信号量机制控制线程同步。
- 在使用自定义消息时应考虑触发的消息响应阻塞以及未成功造成的影响,笔者暂未遇到,只是一个想法。