Vc/MFC中自定义消息及其PostMessage触发使用

2023-11-19

http://blog.csdn.net/ztz0223/article/details/2058402

http://blog.csdn.net/a8082649/article/details/7733527

http://bbs.csdn.net/topics/100117277

http://blog.csdn.net/gukesdo/article/details/6754823

Vc中自定义消息及其触发使用

 

如何在VC++中加入自定义消息,我的做法:

这里我以一个对话框为例子,环境:VS 2008,新建一个工程,选择对话框:以编译器给出的对话框为蓝本,自己新建一个按钮如图:

把名字改成如图的,其他比如ID什么的都不改了,默认。

1 首先在ownermessageDlg.h定义消息:例如

define WM_MYMESSAGE (WM_USER+100)

 

2 在.H文件中,加入消息响应函数,如:

afx_msg LRESULT OnMyMessage(WPARAM w,LPARAM l);

该函数有规定的格式:

afx_msg LRESULT Function_Name(WPARAM w,LPARAM l);

 

3 在ownermessageDlg.cpp加入消息响应宏

在响应该消息的类中,在消息响应块中,

BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)

   ON_WM_SYSCOMMAND()

   ON_WM_PAINT()

   ON_WM_QUERYDRAGICON()

   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

加入以下语句:

ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)

成为如下样式:

BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)

   ON_WM_SYSCOMMAND()

   ON_WM_PAINT()

   ON_WM_QUERYDRAGICON()

   ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)

   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

4 在.CPP文件中,编辑消息响应函数,如下:

LRESULT CownermessageDlg::OnMyMessage(WPARAM wParam, LPARAM lParam) {

   MessageBox(_T("My Message!"));

   return 1;

}

 

5.在对话框中为新增的按钮添加单击响应,ownermessageDlg.cpp中的MESSAGE_MAP变成:

BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)

   ON_WM_SYSCOMMAND()

   ON_WM_PAINT()

   ON_WM_QUERYDRAGICON()

   ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)

   //}}AFX_MSG_MAP

   ON_BN_CLICKED(IDC_BUTTON1, &CownermessageDlg::OnBnClickedButton1)

END_MESSAGE_MAP()

 

void CownermessageDlg::OnBnClickedButton1()

{

   // TODO: Add your control notification handler code here

   //::PostMessage(

   PostMessage(WM_MYMESSAGE, IDC_BUTTON1);

}



6.子线程里也可以向UI线程发送消息

void CTestThreadDlg::OnBnClickedOk()

{
// TODO: Add your control notification handler code here
//AfxBeginThread(MyThread,this);

::AfxBeginThread( MyThread, (LPVOID) this);

Sleep(10);

}
UINT CTestThreadDlg::MyThread(LPVOID lpstr)
{
CTestThreadDlg* pDlg;
pDlg=(CTestThreadDlg*)lpstr;
::PostMessage(pDlg->m_hWnd,WM_MYMESSAGE,0x30,NULL);
 Sleep(100);
return 0;
}

 

PostMessage(……)这个就是响应WM_MYMESSAGE消息的,其实这样写也是可以的:

PostMessage(WM_MYMESSAGE);

我们来看看这个消息的函数原型:

在CWnd::PostMessage中定义

BOOL PostMessage (

   UINT message,

   WPARAM wParam = 0,

   LPARAM lParam = 0

);

Parameters:

message

Specifies the message to be posted.

wParam

Specifies additional message information. The content of this parameter depends on the message being posted.

lParam

Specifies additional message information. The content of this parameter depends on the message being posted.

Return Value

Nonzero if the message is posted; otherwise 0.

 

所以一般的当点击时,消息触发就会发送一个WM_MYMESSAGE消息,故而调用CownermessageDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)这个函数。


SendMessage也可以实现消息发送,不同的是SendMessage函數是阻塞的。PostMessage函數是非阻塞的。SendMessage只有在对应的类处理完发送的消息后才返回,这样后面的代码可能要过一段时间才能执行;

而PostMessge是发送完消息就立即返回,不管消息处理完没有,这样后面的代码就可以立即执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vc/MFC中自定义消息及其PostMessage触发使用 的相关文章

  • 无法检索正则表达式匹配结果 - MFC / C++

    我正在阅读 HTML 页面并尝试检索其中的特定字符串 我有以下代码 std string str test GetString someString the string i have checked it it s basically a
  • CCcomboBoxEx 图像和文本之间的间距

    有没有什么方法 一些系统指标值或其他任何东西可以给出 CComboBoxEx 控件上图标和图像之间的边距有多少像素 下图中红色标记表示的空间 None
  • 寻找 C++ 中搜索和替换的圣杯

    最近 我正在寻找一种替换字符串中标记的方法 这本质上是查找和替换 但至少还有一种解决问题的方法 看起来像是相当平庸的任务 我已经提出了几种可能的实现 但从性能的角度来看 它们都不能令人满意 最好的成绩是每次迭代约 50us 这种情况很理想
  • Mfc CComboBoxEx - 如何更改背景颜色

    我有一个派生自 CComboBoxEx 的类 我正在尝试更改背景颜色 我认为它会像 ComboBox 一样工作 使用 SetBkColor 函数 但它不会改变背景颜色 这是我尝试过的 BEGIN MESSAGE MAP CMyComboBo
  • MFC中Tree(CTreeCtrl)中添加特定树项的图标

    我们可以为特定的树项目添加图标吗 我使用以下功能添加带有图标的项目 HTREEITEM InsertItem LPCTSTR lpszItem int nImage int nSelectedImage HTREEITEM hParent
  • 如何将 unicode 字符变成小写字母

    我在 VC MFC 中将 unicode 字符转换为小写字母时遇到问题 我在 CString 变量中有 unicode 字符 所以 使用英语 MakeLower 工作正常 我得到小写字母 但它无法将 unicode 字符转换为小写 我确实尝
  • 升级后的 MFC 应用程序看起来仍然很旧

    我有一个用 VC6 编写的 MFC 应用程序 我已将其升级到 VS2015 并且它可以构建并运行 该应用程序是一个主可执行文件 其中包含许多包含对话框的 DLL 然而应用仍然looks就像用 VC6 构建的一样 所有 GUI 组件都没有 W
  • CloseWindow和WM_CLOSE有什么关系

    我现在有点困惑 是吗 WM CLOSE http msdn microsoft com en us library windows desktop ms632617 28v vs 85 29 aspx and CloseWindow htt
  • 如何最好地避免 C++/CLI 本机类型中的双重转换

    传统上 我一直使用 MFC 扩展 dll 并使用 dllimport dllexport 导入 导出 但是 当 dll 更改为使用 clr 时 此方法的成本会变得很高 因为调用可能会导致双重转换 我现在的性能受到了巨大的打击 需要停止双重重
  • AfxGetAppName() 返回垃圾字符

    我的应用程序中有以下代码行 CString strAppName AfxGetAppName 有时会充满strAppName出现了垃圾字符 我不明白为什么 有人有主意吗 TIA 如果你改变的话这是可能的m pszAppName手动 在应用程
  • 如何将 std::variant 作为 VARIANT* 传递给 ExecWB?

    我看过这篇关于使用的文章std variant https en cppreference com w cpp utility variant 这是因为以下代码引发了代码分析警告 void CChristianLifeMinistryHtm
  • 默认情况下启用或禁用菜单项。为什么?

    我有一些遗留代码 由于某种原因 菜单项在启动时被启用或禁用 我的问题是 如何 有没有办法在不调用 EnableMenuItem 函数的情况下执行此操作 MFC 有没有办法做与资源设置所说相反的事情 我也不明白为什么当最后一个子窗口关闭时 当
  • 如何找到激活时打开给定 HMENU 的菜单项(如果有)?

    我想用原型实现一个功能 Locates the menu item of the application which caused the given menu mnu to show up return true if the given
  • 如何使用 MFC 禁用顶级菜单项并使其变灰

    我有一个对话框应用程序 我希望在对话框顶部有可单击的菜单项 这些项目不显示下拉菜单 但实际上运行关联的命令 我通过在对话框属性中设置 Popup False 并分配消息 ID 来做到这一点 但我的问题是 当项目可点击没有意义时 无法正确禁用
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • 屏幕截图忽略了一些窗口

    我正在 MFC 中工作 我正在尝试捕获桌面的 bmp 我正在使用 GetDC NULL 来执行此操作 但它似乎忽略了特殊的皮肤窗口 它似乎忽略了用 UpdateLayeredWindow 绘制的窗口 此行为似乎仅发生在 Vista x64
  • 发送WM_SETTEXT时如何避免EN_CHANGE通知?

    我有一个 CEdit 派生控件 当基本数据为空时 该控件显示字符串 N A 我最近添加了代码 以在控件获得焦点时清空控件 SetWindowText 并在用户离开焦点时将其设置回 N A SetWindowText N A 控空 唯一的问题
  • 如何在 MFC 中调整对话框大小时移动控件?

    我已经在 MFC 中创建了对话框视图 从下图中可以清楚地看到 如滑块控件和编辑框等 当我调整对话框大小时 这些控件不会移动 在此输入图像描述 https i stack imgur com 7OxAK jpg 我想移动控件以适应对话框 但不
  • Create CFrameWnd 给出了第一次机会异常——为什么?

    我正在尝试使用基于 CFrameWnd 的代码编写一个简单的 MFC 应用程序 该应用程序在可滚动窗口中绘制 下面的代码改编自 Prosise Programming Windows with MFC 第 2 版 第 89ff 页 当我在调
  • 具有键唯一性和按位置排序的 MFC 字典集合

    看着表上http msdn microsoft com en us library y1z022s1 28v vs 80 29 aspx core collection shape features http msdn microsoft

随机推荐

  • 准确率与召回率

    1 准确率与召回率 Precision Recall 准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值 用来评价结果的质量 其中精度是检索出相关文档数与检索出的文档总数的比率 衡量的是检索系统的查准率 召回率是指检索出的相关文档
  • 求字符串长度的三种方法(C语言)

    如何求字符串的长度 首先要明白字符串存储的原理 字符串存储时 是以 0 结尾 这个就可以作为判断字符串结尾的一个条件 接下来 只要有字符串的首元素地址 就可以解决求字符串长度的问题啦 第一种 普通版 int my strlen char s
  • Revit 2019: Essential Training for MEP (Metric) Revit 2019:MEP基本培训 Lynda课程中文字幕

    Revit 2019 Essential Training for MEP Metric Revit 2019 MEP基本培训 Lynda课程中文字幕 Revit 2019 Essential Training for MEP Metric
  • 转载:Swap与Memory内存简单介绍

    背景介绍 对于Linux来说 其在服务器市场的使用已经占据了绝对的霸主地位 不可动摇 Linux的各种设计思想和使用也被传承 当然不乏各种黑Linux 而且黑的漂亮 Linux的很多独特的设计 对性能也产生了巨大的提升 也为其他应用软件和系
  • 如何加载MySql数据库驱动?

    一 直接把下载好的驱动jar包放在了C 下 二 修改CLASSPATH 右键 我的电脑 gt 环境变量里 遇到的问题 1老是遇到如下图红线框中的问题 修改了有5678次才修改
  • C语言整理

    C语言整理 谭大爷的书 精简版 l 程序设计和C语言 1 main表示主函数 int表示类型 stdio是一个文件名 h是头文件 include指令把信息调用 2 函数的组成 函数首部和函数体 声明部分与执行部分 3 编辑 编译 链接 执行
  • 医院管理系统服务器,解决方案-医院业务运维管理系统- 新华三集团-H3C

    BSM概述 H3C BSM 业务服务管理 解决方案 是新一代以业务为视角 以CMDB为核心 对业务和相关IT基础设施进行监控 管理和分析的解决方案 从业务入手 全面管理应用 网络 计算 存储 虚拟化等IT资源 建立统一的IT资源信息库 实现
  • 数据结构之数组

    目录 前言 线性表与连续内存 数组是如何支持随机访问 数组的插入与删除 数组越界 总结 参考文章 前言 数组是我们平时开发中经常遇到的一种数据结构 提起数组 我们能想到最大的特点就是 要提前定义好 需要提前申请好内存空间 数组是一种线性表数
  • 使用SVM对随机生成数据集进行分类 (线性可分 硬间隔)

    具体数学原理参考 统计学习方法 在学习过程中有疑惑如下 一直想不明白为什么式7 11中的分子没有用并且可以被当作常数 下面的解释是当w与b同比例变换时 函数间隔 即分子 亦会同比例变换 的确是这样 自己纸上写一下就好 但是为什么w和b一定要
  • 关于使用了中文用户名安装anaconda后jupyter报错问题解决 ---亲测有效

    win r 输入cmd后 弹出窗口里用户名是中文 有人会说 这个问题简单 直接改一下账户名即可 但这里只会使开机密码能改 dos窗口不会变 这样会导致一个问题 国外的某些软件 比如anaconda 要求启 动路径不能包含中文 必须是全英文
  • 第一天 复旦微FM33G048简单入门学习

    1 复旦微FM33G048基本参数 内容 参数 宽电压范围 1 8 5 5V 处理器内核 ARM Cortex M0 最高40MHz主频 SWD调试接口 支持用户 特权模式 支持中断向量表重定向 VTOR 低功耗技术平台 典型运行功耗180
  • 【零基础玩转BLDC系列】基于反电动势过零检测法的无刷直流电机控制原理

    无刷直流电动机基本转动原理请参考 基于HALL传感器的无刷直流电机控制原理 基本原理及基础知识本篇不再赘述 目录 反电势过零检测法的原理 反电势过零检测实现方法 位置传感器的存在限制了无刷直流电机在某些特定场合中的应用 如 使电机系统的体积
  • 试题库管理系统--数据库设计

    链接 https pan baidu com s 1ilMGCA n1GPDk3O8k7w7Gg 提取码 m0ke 复制这段内容后打开百度网盘手机App 操作更方便哦 一 概要设计 1 1 背景和意义 目前 许多高校绝大多数课程还采用考教统
  • Spring(二)控制反转

    控制反转是Spring框架的核心 用来消减计算机程序的耦合问题 依赖注入是IoC的另一种方法 只是从不同的角度上来描述的 通过 面向对象思想讨论控制反转和依赖注入两个概念 当某个java对象 调用者 需要调用另一个Java对象 被调用者 即
  • 声笔飞码6.00版使用指南

    声笔飞码6 00版使用指南 声笔飞码发明人兼设计人 戴石麟 电邮 sbxlm 126 com 一 声笔飞码6 00简介 声笔飞码在声笔码的基础上增加了偏旁部首对中文字词进行编码 用一个字母 通常取汉字读音的声母 有时也对偏旁部首进行形托 来
  • 7-1 两个有序链表序列的合并(编程题)

    已知两个非降序链表序列S1与S2 设计函数构造出S1与S2合并后的新的非降序链表S3 输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用 1表示序列的结尾 1不属于这个序列 数字用空格间隔 输出格式 在一行中输出合并后新
  • 完美数

    按照毕达哥拉斯的说法 数的完满取决于它的真因数 即除了自身以外的约数 例如 12的因数是 1 2 3 4 和 6 当一个数的各因数之和大于该数本身时 该数称为 盈 数 于是 12 是一个盈数 因为它的因数加起来等于 16 另一方面 当一个数
  • Linux Touch命令的8种使用技巧

    Linux touch命令不仅可以用于在Linux上创建空文件 您可以使用它来更改现有文件的时间戳 包括其访问权限和修改时间 本文介绍了8种可以通过Linux终端使用touch命令的方案 我们在Ubuntu 18 04 LTS Ubuntu
  • Stable Diffusion背后原理(Latent Diffusion Models)

    前言 2023年第一篇博客 大家新年好呀 这次来关注一下Stable Diffusion背后的原理 即 High Resolution Image Synthesis with Latent Diffusion Models 这篇论文 之前
  • Vc/MFC中自定义消息及其PostMessage触发使用

    http blog csdn net ztz0223 article details 2058402 http blog csdn net a8082649 article details 7733527 http bbs csdn net