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

相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
Smileyqp沛沛2 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·2 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁2 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven2 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
程序猿编码2 天前
告别改源码适配模型:纯 C++ 可配置 LLM 推理引擎,全格式全结构兼容
c++·大模型·llm·推理引擎
此生决int2 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++