MFC自定义消息的实现方法----(线程向主对话框发送消息)

本文介绍在MFC框架下,如何通过自定义消息在多线程间进行安全的界面控件操作,避免直接调用导致的界面更新问题。通过详细步骤说明,包括宏定义、消息映射和回调函数实现,确保线程间通信的有效性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在MFC中,我们一边在使用多线程时,经常会遇到在需要调用到新建的控件,此时建议不要在新建的线程中直接调用主对话框的控件,我们可以通过自定义消息,在新建线程中发送并触发主线程进行相关的界面控件操作。

以Dialog对话框程序为例,添加自定义消息的操作方法可以如下所示:

1. 在头文件stdafx.h中添加一个自定义消息宏:

#define WM_USER_MSG_HDL    (WM_USER + 1)

2. 在增加新消息的窗口或对话框类头文件中增加一个回调函数声明,注意要声明为public

afx_msg LRESULT OnUserMsgHdl(WPARAM wParam, LPARAM lParam);

3. 在窗口或对话框的cpp文件的BEGIN_MESSAGE_MAP,END_MESSAGE_MAP中增加一行

ON_MESSAGE(WM_USER_MSG_HDL, OnUserMsgHdl)

4. 在窗口或对话框的cpp文件中添加回调函数的实现,如:

//wParam和lParam为sendMessage或PostMessage传递过来的参数
LRESULT ThreadDialog::OnUserMsgHdl(WPARAM wParam, LPARAM lParam) 
{
    TRACE("WM_USER_MSG_HDL message /n");
    return 0;
}     

5. 自定义消息的触发:

::PostMessage(GetSafeHwnd(), WM_USER_MSG_HDL, 0, 0);

其中,GetSafeHwnd()得到了一个当前窗口的句柄,此消息将发送给当前窗口,如果想发送消息给其他窗口只需改变这个句柄,前提示目的的窗口也实现了此消息的处理函数。

该文章参考 https://www.cnblogs.com/rainbow70626/p/8034910.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值