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传递消息sendmessage的更多相关文章

  1. MFC用PostMessage传递消息

    1.自定义消息ID. #define WM_MY_MESSAGE (WM_USER+100)         WM_USER为windows系统为非系统消息保留的ID,这里至少要用100,因为其它控件 ...

  2. C#进程间通信--API传递参数(SendMessage)

    原文 C#进程间通信--API传递参数(SendMessage)  我们不仅可以传递系统已经定义好的消息,还可以传递自定义的消息(只需要发送消息端和接收消息端对自定义的消息值统一即可).下面的发送和接 ...

  3. httpUrlConnection连接网络的用法(用到了handle传递消息,在主线程中更新UI)

    由于httpclient在Android5.0以后已经过时,所以官方推荐使用httpUrlConnection来连接网络,现将该连接的基本方法展示,如下 注意:记得加入<uses-permiss ...

  4. C# WPF 无窗体传递消息

    WPF如果存在窗体(或至少,在任务栏有图标显示),互相传递消息是很容易的. 寻找目标窗体句柄->WindowsAPI SendMessage/PostMessage->目标窗体AddHoo ...

  5. C# WPF 窗体传递消息

    对于存在窗体的WPF程序(或者说,起码在任务栏上有个图标,即ShowInTaskbar = true),互相传递消息是很容易的. 步骤: 1,寻找窗体的句柄 2,运用windows API: Send ...

  6. Android消息传递之组件间传递消息

    前言: 上篇学习总结了Android通过Handler消息机制实现了工作线程与UI线程之间的通信,今天来学习一下如何实现组件之间的通信.本文依然是为学习EventBus做铺垫,有对比才能进步,今天主要 ...

  7. Android为TV端助力:intent传递消息

    我们都知道一个activity向另外一个activity传递消息可以用intent来传递 现在需求如下,一个不断接收消息服务的service,一个收到消息进行处理的activity service第一 ...

  8. Android开发--Service和Activity通过广播传递消息

    Android的Service也运行在主线程,但是在服务里面是没法直接调用更改UI,如果需要服务传递消息给Activity,通过广播是其中的一种方法: 一.在服务里面发送广播 通过intent传送数据 ...

  9. javascript重定向页面并用post方法传递消息

    javascript中重定向页面得方法很多,同时能传递消息的也不少:但可用post方法传递的我只找到两种: 第一种方法:用document.write在 JavaScript函数中,用document ...

随机推荐

  1. EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他

    原创 : EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他 转载,请注明出处哦!谢谢! 原创 : EasyUI datagrid 明细表格中编辑框 事件绑 ...

  2. hdu 1158-Employment Planning,n*n*n

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1158 解题思路就不多说,动态规划. 值得提及的是题目没有给出数据范围,水过的都默认工人数目不超过100 ...

  3. .NET-DataTable或DataSet转JSON

    通过AJAX异步减少网络内容传输,而JSON则可以把传输内容缩减到纯数据:然后利用jQuery内置的AJAX功能直接获得JSON格式的数据:在客户端直接绑定到数据控件里面,从而达到最优. #regio ...

  4. 使用SQL SERVER FOR XML PATH将多个结果集转换成一行并进行去重处理

    在一个医药行业的系统中需要根据患者的接触记录ID获取不同接触类型的集合,效果像这样     --患者接触记录信息,一个患者可以有N个不同的接触记录,每个接触记录又有N个接触类型记录 IF OBJECT ...

  5. MyReport报表引擎2.1.0.1新功能

    MyReport报表引擎(免Flex开发集成版)的使用场合适用于以传统html构建的系统,希望集成MyReport报表引擎的报表预览.打印和报表设计功能,而且不须要进行Flex相关的二次开发的用户.M ...

  6. C#获取外网IP地址;C#获取所在IP城市地址

    public static string GetIP()         {             using (var webClient = new WebClient())           ...

  7. 【iOS开发-59】LOL案例:单组tabView、alertView样式、实现监听,以及用reloadData数据刷新

    案例效果: (1)先在storyboard中拖拽出一个tableView,然后下面用代码. --tableView继承自scrollView.所以自然有滚动的特性 --最基本的还是数据转模型.以及对c ...

  8. Python中的作用域

    Python中的作用域 Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定的. 当 Python 遇到一个变量的话他会按照这样的顺序进行搜索: 本地作用域(Local)→当前作用域被嵌 ...

  9. LeetCode Linked List Cycle 解答程序

    Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up: Can you solve i ...

  10. js 函数节流throttle 函数去抖debounce

    1.函数节流throttle 通俗解释: 假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯: 但是,你是个没耐心的人,你最多只会等待电梯停留一分钟: ...