本文实例讲述了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程序设计有所帮助。

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

  1. scala 函数中嵌套函数_Scala中的嵌套函数 用法和示例

    scala 函数中嵌套函数 Scala中的嵌套函数 (Nested functions in Scala) A nested function is defined as a function whi ...

  2. oracle中转换函数,Oracle中的转换函数

    Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...

  3. 函数参数中带省略号的用法

     [转]函数参数中带省略号的用法 本文摘自CDSN<可变参数学习笔记>,原帖链接:http://topic.csdn.net/t/20041124/09/3582660.html 前言 ...

  4. python的for语句用法_python中list循环语句用法实例

    本文实例讲述了python中list循环语句用法.分享给大家供大家参考.具体用法分析如下: Python 的强大特性之一就是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个 ...

  5. php中调用go代码,php中的goto的用法实例(代码)

    本篇文章给大家带来的内容是关于php中的goto的用法实例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们先举个简单示例: goto LABEL; //这个标签自定义ec ...

  6. for循环语句例题及解析python_Python中for循环控制语句用法实例

    Python中for循环控制语句用法实例 这篇文章主要介绍了Python中for循环控制语句用法,较为详细的分析了for循环语句的原理与相关使用技巧,本文实例讲述了Python中for循环控制语句用法 ...

  7. java中的string函数_java中string.trim()函数的作用实例及源码

    trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ String a=" hello world "; Str ...

  8. java random构造方法_Java中的Random()函数及两种构造方法

    Java中存在着两种Random函数: java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是 ...

  9. java substr函数_oracle 中的substr()函数的用法,以及与java中String.substring()方法的区别...

    oracle 中的substr()函数的规则是 substr( string, start_position, [ length ] ) 说明: string 是要分割的字符串 start_posit ...

最新文章

  1. 2021年大数据Spark(七):应用架构基本了解
  2. conda创建子环境并注册kernel
  3. 关于微信小程序开发中遇到的缺少game.json问题的解决
  4. Native wifi API使用
  5. [Java多线程]-J.U.C.atomic包下的AtomicInteger,AtomicLong等类的源码解析
  6. Newton Method in Maching Learning
  7. list是否包含字符串_Python创建list
  8. 2020爱分析·智能通讯云厂商全景报告
  9. 计算机的桌面图标设置在哪里,电脑小图标怎么设置在哪里
  10. java textfield 右对齐_TextField右对齐问题javafx
  11. 二维码在Access中的使用
  12. torch.backends.cudnn.benchmark的用法
  13. Boolean中0与1的转化
  14. 算法之狄克斯特拉算法
  15. Python遇到过得text和text()
  16. matlab快速生成双峰函数
  17. 如何使用idea 连接达梦数据库?
  18. 正版免费图片编辑处理软件下载_图片处理软件
  19. 9月17-18日黑客马拉松挑战赛-北京站
  20. [论文学习笔记]01一种轮廓平行扫描算法【3D打印路径规划】

热门文章

  1. 使用JUnit 5进行Spring Boot测试
  2. Spring Cloud简介–配置(第一部分)
  3. JWT令牌的秘密轮换
  4. 如何编写更少,更好的代码,或Project Lombok
  5. jdeveloper_适用于JDeveloper 11gR2的Glassfish插件
  6. Java Finalizer和Java文件输入/输出流
  7. spring social_Spring Social入门
  8. erlang 架构原理_Erlang与Java内存架构
  9. CUBA平台–新的Java企业应用程序框架
  10. 创建Sonarqube项目