java sendmessage函数_vc中SendMessage自定义消息函数用法实例

本文实例讲述了vc中SendMessage自定义消息函数用法,分享给大家供大家参考。具体如下:

SendMessage的基本结构如下:

SendMessage(

HWND hWnd,  //消息传递的目标窗口或线程的句柄。

UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)

WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,

//在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。

LPARAM lParam); //参数2

其中一些参数的由来如下:

//typedef unsigned int UINT;

//typedef UINT WPARAM;

//typedef LONG LPARAM;

//typedef LONG LRESULT;

例如可以用以下语句:

::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);

这里我发送的消息是本窗体接收的,所以句柄用:this->m_hWnd

这里的消息类别WM_MY_DOSOME就是我自定义的,

在接收消息的窗体或线程所在的头文件里:

#define WM_MY_DOSOME WM_USER+1 // do something

当然你还可以定义更多如:

#define WM_DOOTHER WM_USER+2 // do other

表示要做一些事情。

到这里,可能大家还是对消息类别有点模糊,不要担心,下面很快就讲到。

我们发了一个消息出去,那么接收方要能识别这个消息是干什么,就是通过消息类别来区分,并且开始去做这个消息对应要处理的事情。如下:

一、编写一个事情:我们在接收窗体里定义一个这样的事情(过程),

afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)

{

MessageBox("收到消息了,我要开始做一些事情了。","收到",MB_OK);

//可以运用iParam1,iParam2 来做一些事情。

return 0;

}

这个事情有3点大家要注意,非常重要:

1. 使用了afx_msg,并且要将afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)

改写到头文件的

//{{AFX_MSG

//。。。改写到这里,颜色会变成灰的。这一点非常重要。

//}}AFX_MSG

2. 参数有2个,WPARAM iParam1,LPARAM iParam2,哪怕没有东西传进来也要写,不然会吃苦头的,vc里不会提醒你少写了一个,

但一些莫名奇妙的事情会发生。

3. 类型用 LRESULT,完了要return 0;

二、让接收方知道什么时候做这个事情:我们在

//{{AFX_MSG_MAP

//。。。这里写上

ON_MESSAGE(WM_MY_DOSOME,DoSomeThing)

//如果还有其他消息就再写一个

ON_MESSAGE(WM_DOOTHER,DoOther)

//}}AFX_MSG_MAP

到这里,当你用SendMessage,发了一个WM_MY_DOSOME类型的消息过来的时候,接收方就会去做DoSomeThing(WPARAM iParam1,LPARAM iParam2)

发了一个WM_DOOTHER类型的消息过来的时候,接收方就会去做DoOther(WPARAM iParam1,LPARAM iParam2)当然,这里DoOther我还没有定义。

这样就是一个完整的消息发送与接受过程,这里没有详细讲参数,iParam1,因为还没有用到很复杂的情况,

在头文件里:

#define WM_MYMSG  WM_USER+5 //自定义一个消息

afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定义消息的处理函数声明

在.cpp文件里:

ON_MESSAGE(WM_MYMSG, OnMyMessage)

//利用ON_MESSAGE()宏在自定义消息与其处理函数间建立映射关系

void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)

//从lParam中取出CString对象的指针,并将字符串内容在IDC_MSGEDIT中显示出来

{

CString *str;

str=(CString *)lParam;

SetDlgItemText(IDC_EDIT,*str);

}

按下按钮发送消息

void CModelessDlg::OnMsgBTN()

{

CString str= "自定义消息被触发了!";

SendMessage(WM_MYMSG, 0, (LPARAM) &str);

//给ModelessDlg自己发一个自定义的消息

}

希望本文所述对大家的VC程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你为什么要关心equals和hashcode

等于和哈希码是每个Java对象的基本元素。 它们的正确性和性能对于您的应用程序至关重要。 但是,我们经常看到甚至有经验的程序员都忽略了类开发的这一部分。 在本文中,我将介绍一些与这两种非常基本的方法有关的常见错误和问题。 合同 提到的方法至关重…

java判断时间是否在时间段内_具有C语言基础,利用半年时间学习Java是否够用

首先,对于具有一定C语言基础的同学来说,利用半年的时间来学习Java会有一个比较系统的学习过程,通常也能够达到实习程序员,或者是助理程序员的水平,然后在技术团队中实践一段时间之后,从事专业开发岗位应该是…

Liao Wenxiong‘s thoughts

点击看看在想什么鬼

python3字符串截取_从python3中的字符串中获取特定文本

只是使用str.split()和赋值给变量,还有一个默认的第二个参数可以帮助您处理唯一的total/free avail场景def get_free_memory(ssh_obj, rawTrue):stdin, stdout, stderr ssh_obj.exec_command(free -h)mem_stats stdout.readlines()[1]if raw:mem_stats_formatted " &qu…

kafka connect_Kafka Connect在MapR上

kafka connect在本周的白板演练中,MapR的高级产品营销经理Ankur Desai描述了Apache Kafka Connect和REST API如何简化和提高在处理来自包括旧数据库或数据仓库在内的各种数据源的流数据时的敏捷性。 他还解释了当您使用MapR Streams与Kafka进行数据传输时&#xff0…

二维动画作品_「咻动画」二维动画制作中角色造型的设计要点

关于二维动画可能就算不是动画行业的小伙伴们都多多少少都有所了解,近年来其在宣传片制作上面越来越受用。不少企业抛开传统保守的宣传片表现形式转而尝试动画制作宣传片,我们都知道在动画制作从脚本策划到输出成片这个过程中是一个很复杂的制作流程&…

MySQL函数/数据库函数

文章目录一、单行函数(一)数学函数1. round(x),返回离 x 最近的整数,即对 x 进行四舍五入2. round(x,y),返回数值 x 保留到小数点后 y 位的值3. truncate(x,y),返回数值 x 保留到小数点后 y 位的值4. abs(x…

java请求并行方案_让 Yar Java Client 支持执行并行请求,ExecutorService 的使用

官方 php 客户端文档如下Yar_Concurrent_Client {/* 属性 */static $_callstack ;static $_callback ;static $_error_callback ;/* 方法 */public static int call ( string $uri , string $method , array $parameters [, callable $callback ] )public static boolean loop …

javaone_JavaOne 2016后续活动

javaone我很高兴今年参加了JavaOne,我可以用一个词概括一下这一经验:辉煌。 对我来说,今年与往年相比有很大不同,因为我在周日有一个演讲要共同主持,而我剩下的一周时间都可以参加会议。 因此,我了解到在Ja…

c# redis 如何设置过期时间_Redis 过期时间与内存管理

http://www.redis.cn/commands/expire.htmlhttp://www.redis.cn/topics/lru-cache.html内存管理 当 Redis 作为缓存使用时(此时缓存仅作为热点数据提高服务的访问性能),需要考虑内存的限制,以及如何随着业务的增长,仅保…

Oracle 数据库的子查询(关联子查询)

文章目录一、子查询结果返回一个值(单列单行)二、子查询结果返回多行(单列多行)三、子查询结果返回多列多行四、关联子查询(一)子查询执行顺序(二)exists 关键字五、子查询总结六、关…

大端字节序码流中取出2字节_产生字节码

大端字节序码流中取出2字节在这篇文章中,我们将看到如何为我们的语言生成字节码。 到目前为止,我们已经看到了如何构建一种语言来表达我们想要的东西,如何验证该语言,如何为该语言构建编辑器,但实际上我们还不能运行代…

python编写程序时必须遵守的规则被称为_Python程序设计方案习题与答案

《 Python 程序设计》习题与参考答案 第 1 章 基础知识 简单说明如何选择正确的 Python 版本。 答: 在选择 Python 的时候,一定要先考虑清楚自己学习 Python 的目的是什么,打算做哪 方面的开发,有哪些扩展库可用,这些扩…

python写520_用Python做一个520表白神器,值得收藏

本文最后给出了打包好的软件,无需安装Python环境和各种依赖,直接下载软件,解压后,双击exe文件即可使用。先来看一下具体的效果。运行程序。用Python做一个520表白神器,值得收藏点击「选择图片」 选择JPG/JPGE/PNG三种中…

Oracle/MySQL数据库查询结果集的集合操作(合集/交集/差集)

文章目录集合操作的前提条件集合操作合集 union合集 union 和 union all 的比较交集 intersect差集 minus集合操作的前提条件 1.两个结果集必须结构相同。 当列的个数、列的顺序、列的数据类型一致时 , 我们称这两个结果集结构相同 2.只有结构相同的结果集才能做集合操作 集…

python有道自动翻译_利用python写一个有道翻译的脚本

废话不多说,直接上代码import urllib.request import urllib.parse import json content input("请输入要翻译的内容:") url http://fanyi.youdao.com/translate?smartresultdict&smartresultrule&smartresultugc&sessionFromn…

为什么java抗并发_用最通熟易懂的话说明,为什么要使用java并发编程

老早之前的计算机只有一个处理器,而 一个处理器在同一时刻只能处理一条指令 ,换句话说,我们的代码需要一行一行的按顺序被计算机执行,计算机只能把一个程序完整的执行完,然后再执行第二个程序。所以计算机专业的同学们…

java ee的小程序_Java EE调度程序

java ee的小程序Java EE应用程序服务器具有本机调度支持,并且在大多数应用程序中,不需要包括外部依赖项,例如著名的Quartz调度程序库。 Java EE 6和7完整配置文件上提供的Java EE 6计时器服务为我们提供了许多选项来定义调度间隔&#xff0c…

MyEclipse for Mac快捷键

文章目录编辑查询/替换导航调试重构其他编辑 快捷键功能说明Command1快速修复,比如与Syso配合,与main配合可快速构造方法签名(最经典的快捷键,就不用多说了,可以解决很多问题,比如import类、try catch包围等&#xff…

不同坐标系下角速度_最伟大的数学发明,坐标系的诞生,是人类史上的方向盘...

【想要了解更多精彩文章、视频,欢迎关注创鹏科学堂】人生最大的意义,莫过于过得更方便;数学最大的意义,莫过于帮助人类过得更方便。几千年来,自从数学出现之后,它就一直以人类生活为导向,以宇宙…