CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何用PostMessage/SendMessage 发送字符串?

楼主abuseyoudna1981()2006-05-03 21:04:54 在 VC/MFC / 基础类 提问

请问如何使用P/S   发送字符串?格式是怎么样的,应该如何写,请人指点一下.  
   
  例如我要把字符串"I   LOVE   YOU"作为参数,应该怎么写.  
  在消息处理函数里面应该怎么样提取?  
   
  假如我已经自定义了WM_MSG 问题点数:20、回复次数:6Top

1 楼Snow_Ice11111(雪上加冰)回复于 2006-05-03 22:18:27 得分 10

发送字符串用WM_COPYDATA消息就行了,何必自定义消息?下面是摘取我以前的笔记中的,供你参考一下:  
   
  1 发送消息的程序中比较简单,在要发送的地方加入如下代码就行了:  
  void   CSendDlg::OnSend()  
  {  
  //   TODO:   Add   your   control   notification   handler   code   here  
   
  CString   str="这是我要发送的给另外一个进程字符串。";  
  COPYDATASTRUCT   myCopyDATA;  
  myCopyDATA.cbData=str.GetLength();  
  myCopyDATA.lpData=str.GetBuffer(0);  
  str.ReleaseBuffer();  
  HWND   hwnd=::FindWindow(NULL,"Receive");             //假设目标程序窗口标题为"Receive"  
  if   (hwnd)  
  ::SendMessage(hwnd,WM_COPYDATA,NULL,(LPARAM)&myCopyDATA);  
  else  
  AfxMessageBox("目标程序没有运行。");  
   
  }  
  2 接收消息的程序(这里假设是基于对话框的工程)请按如下步骤来实现:  
  先给对话框类CReceiveDlg(如果你的接收程序为SDI工程的话,把CReceiveDlg类换成CMainFrame类)添加一个消息处理函数LRESULT   OnReceive(WPARAM   wParam,LPARAM   lParam),代码如下:  
  LRESULT   CReceiveDlg::OnReceive(WPARAM   wParam,LPARAM   lParam)  
  {  
  COPYDATASTRUCT   *p   =   NULL   ;  
  p   =   (COPYDATASTRUCT*)lParam;  
  CString   strTemp;  
  memcpy(strTemp.GetBuffer((int)p->cbData),p->lpData,p->cbData);  
  strTemp.ReleaseBuffer();  
  AfxMessageBox(strTemp);  
  return   0;  
  }  
  接着再给工程设定刚才添加的函数OnReceive为WM_COPYDATA消息的响应函数,在ReceiveDlg.cpp文件中如下地方加入一行代码:  
  BEGIN_MESSAGE_MAP(CReceiveDlg,   CDialog)  
  //{{AFX_MSG_MAP(CReceiveDlg)  
  ON_WM_PAINT()  
  ON_WM_QUERYDRAGICON()  
  ON_MESSAGE(WM_COPYDATA,OnReceive)           //只要添加这一行进行WM_COPYDATA消息映射  
  //}}AFX_MSG_MAP  
  END_MESSAGE_MAP()  
   
   
  好了,现在分别运行两个程序,应该可以在A程序中给B程序发送消息了,B收到消息后会弹出个MessageBox来显示从A程序发送来消息了。Top

2 楼abuseyoudna1981()回复于 2006-05-03 22:22:14 得分 0

呵呵.上面的方法我会,只是我想知道如何在不用WM_COPYDATA消息,也可以发送字符串而已,可以不用这个消息也可以实现吗?Top

3 楼C200501111(cv)回复于 2006-05-03 22:25:56 得分 0

辛苦了Top

4 楼soaroc(会飞的猪)回复于 2006-05-03 23:17:19 得分 10

char   buf[]="I   LOVE   YOU";  
  SendMessage(WM_MYMSG,(WPARAM)buf,0)  
  在消息响应函数中注意添加wParam和lParam参数,然后使用下面的转换    
  char   *buf=(char   *)wParam;Top

5 楼abuseyoudna1981()回复于 2006-05-03 23:33:44 得分 0

可以了.谢谢楼上所有同胞.  
   
  TO   soaroc(会飞的猪):应该用char*   buf="i   love   you"吧?如果不是.传到过去的时候,已经变成了其他不知名的东东.原理应该还是把字符串的地址给传过去了.Top

6 楼wjj888888(不赖)回复于 2006-05-04 00:24:41 得分 0

收藏一下Top

相关问题

关键词

得分解答快速导航

  • 帖主:abuseyoudna1981
  • Snow_Ice11111
  • soaroc

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo