MFC自定义消息的实现方法----(线程向主对话框发送消息)、MFC不能用UpdateData的解决方法

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

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

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

#define WM_USER_MSG_HDL (WM_USER + 1)

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

afx_msg LRESULT OnUserMsgHdl(WPARAM wParam, LPARAM lParam);

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

ON_MESSAGE(WM_USER_MSG_HDL, OnUserMsgHdl)

  1. 在窗口或对话框的cpp文件中添加回调函数的实现,如:
复制代码
  1. //wParam和lParam为sendMessage或PostMessage传递过来的参数

  2. LRESULT ThreadDialog::OnUserMsgHdl(WPARAM wParam, LPARAM lParam)

  3. {

  4. TRACE("WM_USER_MSG_HDL message /n");

  5. return 0;

  6. }

  7. 自定义消息的触发:

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

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

相关推荐
郝学胜-神的一滴1 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
hetao17338372 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法
间歇性努力持续性发呆的野生快乐选手4 小时前
栈的性质(进栈,出栈,访问)
数据结构·c++
旖旎夜光4 小时前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
乐观勇敢坚强的老彭6 小时前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
我变成萤火虫6 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
buhuizhiyuci7 小时前
【Linux 篇】数字世界的水流蓄水池 —— IO 缓冲区机制深度实战解析
linux·运维·服务器·c++
liulilittle7 小时前
LLM 推理引擎与内核系统工程原理
c++·ai·llm·内存·memory·core·kernel
啦啦啦啦啦zzzz7 小时前
moduo网络库 Acceptor TcpConnection
服务器·网络·c++·reactor·网络库
键盘会跳舞7 小时前
C++:右值引用与移动语义源码级深度拆解——现代C++性能优化的语言基石
c++·右值引用·移动语义