LRESULT SendMessage(
HWND hWnd, // handle to destination window
UINT Msg, // message
WPARAM wParam, // first message parameter,消息的第一个参数
LPARAM lParam // second message parameter,消息的第二个参数,
);
注意1:传递的到底是什么?是字符串,int数据,指针?
参数是一个数据,只能容纳一个数,而不能是一长串数据。这个数可以是一个int数据,也可以是一个指针(指针本质上就是一个数据)。因此,若传递int,可以直接传递;若要传递字符串或者结构体变量,则只能将字符串或者结构体变量的指针赋予参数进行传递,而不是完整的字符串数据或者结构体变量。

 注意2:两个消息参数

WPARAM  和

lParam的区别 ?
wParam和lParam 这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:
一个是WORD类型的16位整型变量;另一个是LONG类型的32位整型变量。因此根据匈牙利命名法,16位的变量就被命名为wParam, 32位的变量就被命名为lParam。到了Win32API中,原来的16位变量也被扩展为32位,因此此时wParam和lParam的大小完全相同。
实例:

实例一,发送char[]字符串

发送Message:

void CDlg2::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here char s0[]="123456FEDBCA\r\n"; //需要传递的变量可以是此函数的局部变量也可以是工程的全局变量 // 通过第一个参数或者第二个参数传递都OK
::SendMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING, , (LPARAM)s0); // OK
// ::SendMessage(pMainFrame->pDlg4->m_hWnd ,UM_MESSAGE_EDIT_ADD_STRING,(WPARAM)&s0,0); // OK // 运用PostMessage 还未测试,据说不同,只能用全局变量,因为POST完之后不会等待消息处理完再进入下一步;而Send会
// 等待消息处理完之后再进行下一步,因此系统在这短时间内不会将本函数内的变量销毁。本人会继续验证PostMessage的功能。
// ::PostMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING, 0, (LPARAM)s1); }

接收处理Message:

LRESULT CDlg4::OnMsgAddString(WPARAM wParam, LPARAM lParam)
{ int nMsgLen ;
CString str;
char *pStr0= (char *)wParam; // OK
// char *pStr0= (char *)lParam; // OK
str.Format(_T("%S"),pStr0); nMsgLen = m_Edit.GetWindowTextLength();
m_Edit.SetSel(nMsgLen, nMsgLen);
m_Edit.ReplaceSel(*pStr1); return TRUE;
}

实例二,发送CString字符串

发送Message:

void CDlg2::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here CString s1=_T("123456\r\n");
// CString 本身是一个类,s1为其实例对象,因此传递的时候必须是这个对象的指针,而不是这个对象。依次类推,不仅可以传递字符串,还一个传递一个自定义的结构体对象或者一个其他类的对象。 //运用第一个参数传递,OK
// ::SendMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING,(WPARAM)&s1,0);
//运用第二个参数传递,OK
::SendMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING, ,(LPARAM)&s1); //OK //::PostMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING, 0, (LPARAM)s1); }

接收处理Message:

LRESULT CDlg4::OnMsgAddString(WPARAM wParam, LPARAM lParam)
{
int nMsgLen ;
// 指针,非对象
CString *pStr1= (CString *)lParam; nMsgLen = m_Edit.GetWindowTextLength();
m_Edit.SetSel(nMsgLen, nMsgLen);
m_Edit.ReplaceSel(*pStr1); return TRUE;
}

MFC各个控件之间运用SendMessage()传送CString和char[]字符串,以及int类型数据的更多相关文章

  1. MFC 操作控件数据

    在MFC中有多种获取控件数据的方法 1.GetWindowText()和SetWindowText()函数   ],ch2[],ch3[]; GetDlgItem(IDC_EDIT1)->Get ...

  2. MFC Spin 控件

    一般应用: 设置属性: Auto Buddy(自动取关联控件为TAB顺序前一个)Set Buddy Interger(使控件设置关联控件数值,这个值可以是十进制或十六进制)Wrap(数值超过范围时循环 ...

  3. .NET同页面内用户控件与父页面以及控件之间方法调用

    用户控件调用父页面的方法: //获得父页面 Page p =this.Parent.Page; Type pageType = p.GetType(); //父页面的方法名 MethodInfo mi ...

  4. 发布MFC ActiveX控件并实现自动更新

    一.        引言 上一篇我们讲了如何使用 VC 2005来开发 MFC ActiveX控件,我们开发 ActiveX控件最终目的是将 ActiveX控件发布出来并嵌入在 Web网页中,随着控件 ...

  5. VS2010/MFC常用控件:图片控件Picture Control

    图片控件Picture Control 本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示图片以美化界面. 图片控件简介 图片控件和前面讲到 ...

  6. 如何将 MFC ActiveX 控件标记为安全,脚本和初始化

    MSDN原文.ActiveX控件标记安全(可以不仅仅是MFC ActiveX) 概要 默认情况下,MFC ActiveX 控件未标记为对脚本编写是安全的和对初始化是安全的.控制运行在 Internet ...

  7. MFC TabCtrl 控件修改标签尺寸

    注意:无论那种方法,都要先设置Tab控件的Style属性为fixed width. 第一种方法 MFC,tabcontrol控件改变标签大小 - CSDN博客 https://blog.csdn.ne ...

  8. vs2010开发activex(MFC)控件/ie插件(一)

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50782904  vs2010开发activex(MFC)控件:      第一步:生成ac ...

  9. MFC 改变控件的大小和位置

    mfc 改变控件大小和位置用到的函数: ) void MoveWindow(int x, int y, int nWidth, int nHeight); ) void MoveWindow(LPCR ...

随机推荐

  1. hdu 2199 Can you solve this equation? 二分

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  2. ThreadPoolExecutor线程池中线程不能超过核心线程数量的问题

    int arg1=2;//核心线程 int arg2=40;//最大线程数量 int arg3=100;//空余保留时间 ThreadPoolExecutor pool=new ThreadPoolE ...

  3. linux ubuntu 安装nginx

    参考原文 在Ubuntu下安装Nginx有以下方法,但是如果想要安装最新版本的就必须下载源码包编译安装. 一.基于APT源安装 sudo apt-get install nginx 安装好的文件位置: ...

  4. 使用fastjson 获取json字符串中的数组,再转化为java集合对象

    最近,使用layui做一个导出功能,尽管有插件提供导出,但是呢,由于数据中有状态是数字,例如1显示是已支付,但是导出时也希望这样显示,但是导出的还是1: lz没有找到改下这个插件的办法,只能利用服务端 ...

  5. PoPo数据可视化周刊第4期

    PoPo数据可视化 聚焦于Web数据可视化与可视化交互领域,发现可视化领域有意思的内容.不想错过可视化领域的精彩内容, 就快快关注我们吧 :) 微信号:popodv_com   由于国庆节的原因,累计 ...

  6. rocketmq Don't have SubscriptionGroup

    1. 问题描述 rocketmq 生产者发消息正常 mq后台也可以看到发出的消息 但是消费者一直没消费 好像订阅没成功 2. 问题排查 通过上图查看 确实没有检测到订阅者 3. 问题解决 线上环境是 ...

  7. JS 和 a href className JS编写顺序与运行顺序 字符串或变量嵌入中括号 代替 点号 代表属性

    JS 和 a href 在href里面注意分号结尾, 引号闭合 <a href="javascript:;">空链接</a> <a href=&quo ...

  8. js-小数计算问题

    先上图: 什么情况? 原因:js采用二进制进行小数计算 先看十进制的小数转换为二进制的方法: 十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位 假如我们有小数111.4(10), ...

  9. Activiti 数据库表自动生成策略

    Activiti 引擎启动时默认会检测数据库版本与程序版本是否相符,不相符就会抛出异常停止引擎的初始化. 这一策略可以通过引擎的初始化配置参数databaseSchemaUpdate来控制, 如下图的 ...

  10. 【es6】Generator 函数

    1. 基本概念 状态机,封装了多个内部状态 2. 应用 返回一个遍历器对象. 3. 代码形式 function* helloWorldGenertor() { yield 'hello'; yield ...