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自己发一个自定义的消息

}

转载于:https://www.cnblogs.com/wqj1212/archive/2008/03/03/1089298.html

vc中怎么使用SendMessage自定义消息函数相关推荐

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

    本文实例讲述了vc中SendMessage自定义消息函数用法,分享给大家供大家参考.具体如下: SendMessage的基本结构如下: SendMessage( HWND hWnd,  //消息传递的 ...

  2. VC++中 PostMessage和SendMessage的区别

    1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数.而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息 ...

  3. VC中,AssertValid和Dump函数

    转自http://tsitao.blog.163.com/blog/static/29795822006914105840496/ CObject::AssertValid 成员函数提供对对象内部状态 ...

  4. VC++中,如何定义callback函数和它的触发事件?

    对于回调函数的编写始终是写特殊处理功能程序时用到的技巧之一.先介绍一下回调的使用基本方法与原理. 1.在这里设:回调函数为A()(这是最简单的情况,不带参数,但我们应用的实际情况常常很会复杂),使用回 ...

  5. 在VC中使用MATLAB C++函数库

    http://Tech.16C.Cn 在VC中使用MATLAB C/C++函数库 MATLAB广泛应用于线性代数.自动控制理论.数理统计.数字信号处理.时间序列分析.动态系统仿真等领域.因此如果在VC ...

  6. VC++中播放声音wav

    因为只需在Windows上执行,先想到用MCI接口.试了一下,用mciSendCommand可以实现基本的播放wav文件的功能.但循环播放wav就麻烦了,必须向窗口传送MM_MCINOTIFY消息. ...

  7. c语言如何实现多线程VC,多线程技术在VC中的应用

    山东理工大学 贾永新 肖爱梅 Visual C++ 6.0 自发布以来,以其强大的功能及各种新特性受到广大编程爱好者的青睐.但是要想成为一个优秀的程序员,写出真正功能强大.能够快速响应且实用的程序就必 ...

  8. VC++中GlobalAlloc()、malloc()和new()函数之间区别

    VC++中GlobalAlloc().malloc()和new()函数都可以用来实现内存的动态分配,那么它们之间有什么区别呢? 三者的区别主要有以下几点: 1.GlobalAlloc()函数在程序的堆 ...

  9. VC中实现GCC的2个比较常用的位运算函数

    在GCC中内嵌了两个位运算的函数,但在VC中并没有这两个函数(有相似函数). //返回前导的0的个数. int __builtin_clz (unsigned int x) //返回后面的0个个数,和 ...

最新文章

  1. Windows Server 2012 文件服务器群集
  2. 中国免检制度可能全面废止 产品免检办法已废除
  3. linux下将目录授权给其他用户的步骤
  4. 抗炎饮食与混合坚果粉
  5. 超越JUnit –测试框架的替代方案
  6. 目标检测第2步:如何在Windows 10下安装Anaconda?
  7. 路由器配置——广播多路访问链路上的OSPF
  8. android 禁用和开启四大组件的方法(setComponentEnabledSetting )
  9. 持续更新,mysql的复习强化路
  10. python列表操作计算列表长度并输出,python列表 (list)
  11. input的23种type类型
  12. 宝塔linux输入bt,Linux宝塔面板如何挂载硬盘?BT宝塔面板磁盘挂载超简单教程来了!...
  13. 什么是Socket 编程
  14. RXTXcomm.jar 读取串口数据时报 Underlying input stream returned zero bytes 异常解决方法
  15. 【愚公系列】2023年01月 Java教学课程 016-break和continue
  16. 打造自己的博客(二)试着添加这两个有意思的插件吧?
  17. Linux虚拟机占用宿主机磁盘空间压缩
  18. es6去除重复项_javascript在ES6中从数组中筛选出重复项并仅返回唯一值
  19. Java_搭建MQTT服务器_一蓑烟雨任平生
  20. IDEA 启动报错:java.lang.IllegalStateException: failed to create a child event loop 问题解决

热门文章

  1. python代码可以内嵌在asp文件中_在IE中使用Python作为开发脚本(转)
  2. python面向对象编程138讲_Python面向对象编程简单讲解
  3. jsp文件能转换html吗,html怎么转换成jsp
  4. pat 乙级 1014 福尔摩斯的约会 (C++)
  5. [渝粤教育] 潍坊职业学院 化工安全技术 参考 资料
  6. 【渝粤教育】国家开放大学2018年春季 8635-21T老年人中医体质辨识与养 参考试题
  7. 【渝粤题库】陕西师范大学201001 教育管理学(高起本)作业
  8. 亿佰特电源模块:无线通信模块电平转换指南
  9. mysql内表和外表_Hive内表和外表的区别
  10. 64位linux并行计算大气模型效率优化研究,64位Linux并行计算大气模型效率优化研究...