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

500分求 对自定义消息以及在自定义的消息中传参数的具体实现详解,主要是msg->WParam和msg->LParam的应用 分别发贴放分!

楼主82wds(同道人,共互勉!)2003-11-02 23:29:11 在 C++ Builder / 基础类 提问

求:对自定义消息以及在自定义的消息中传参数的具体实现详解,主要是msg->WParam和msg->LParam的应用。  
  想了很久也想不通,抓狂中.... 问题点数:100、回复次数:5Top

1 楼netying()回复于 2003-11-03 10:28:26 得分 30

希望对你有用~  
   
   
     
     
  C++Builder如何响应消息及自定义消息  
   
  Inprise(Borland)   C++Builder中,可以象在Delphi中一样响应消息,  
  只是看起来要稍复杂一点。    
   
  对于系统已定义的消息,可以直接响应:    
   
  #define   WM_MY_OPEN_CMDLINE_FILE   (WM_USER+1)   //进程间通讯的自定义消息    
  #define   WM_MY_SEARCH_NODE   (WM_USER+2)   //查找命令的自定义消息    
   
  class   TSomeForm   :   public   TForm    
  {    
  //...类中的其它代码    
  protected:    
  //消息的响应过程    
  void   __fastcall   OpenCmdLineFile(TMessage   Message);    
  void   __fastcall   SearchDocumentNode(TMessage   Message);    
  void   __fastcall   GetWindowMinMaxInfo(TWMGetMinMaxInfo   Message);    
   
  //以下通过宏定义实现消息的正确响应    
  BEGIN_MESSAGE_MAP    
  MESSAGE_HANDLER(WM_MY_OPEN_CMDLINE_FILE,   TMessage,   OpenCmdLineFile)    
  MESSAGE_HANDLER(WM_MY_SEARCH_NODE,   TMessage,   SearchDocumentNode)    
  MESSAGE_HANDLER(WM_GETMINMAXINFO   ,   TWMGetMinMaxInfo,   GetWindowMinMaxIn    
  fo)    
  END_MESSAGE_MAP(TForm)    
   
  };//end   class    
   
  //以下为实现代码    
  void   __fastcall   TSomeForm::OpenCmdLineFile(TMessage   Message)    
  {//直接通过消息结构传递参数    
  LPSTR   lpCmdLine=(LPSTR)Message.LParam;//从Message中取得参数    
  this->HandleCmdLineFile(lpCmdLine);//处理命令行的参数    
  return;    
  }    
   
  void   __fastcall   TSomeForm::SearchDocumentNode(TMessage   Message)    
  {//响应查找消息    
  //Message中的参数在此处不需要。    
  this->SearchNode();    
  return;    
  }    
   
  void   __fastcall   TSomeForm::GetWindowMinMaxInfo(TWMGetMinMaxInfo   Messag    
  e)    
  {//设置主窗口的最小尺寸    
  MINMAXINFO   *MinMaxInfo=Message.MinMaxInfo;    
  MinMaxInfo->ptMinTrackSize.x=400;    
  MinMaxInfo->ptMinTrackSize.y=300;    
  return;    
  }    
   
  其中:TMessage和TWMGetMinMaxInfo类型的定义可参见:    
   
  C:\Program   Files\Borland\CBuilder\inlucde\vcl\Messages.hpp;其它的消息    
  响应方法与此相同。    
   
  另外,可以为自定义的消息也定义一个对应的消息结构(如:TSearchNode_Mes    
  sage),至于如何定义消息结构,   可以参考:  
  C:\Program   Files\Borland\CBuilder\inlucde\vcl\Messages.hpp    
   
  返回  
     
     
  Top

2 楼yjy1001(蓝鲸--优秀得郁闷的鱼)回复于 2003-11-03 13:39:47 得分 20

也帖一个:程序间传递   参数:  
  void   __fastcall   TMainFrm::Send2Msg(AnsiString   Msg)  
  {  
      HWND   handle;  
      handel=FindWindow();  
      TCopyDataStruct   ds;  
      ds.cbData   =   Msg.Length()   +   1;  
      ds.lpData   =   SysGetMem(ds.cbData   );  
      StrCopy   ((char*)ds.lpData,   Msg.c_str());  
      SendMessage(handle,   WM_COPYDATA,   0,   Cardinal(&ds));  
      SysFreeMem(ds.lpData);  
  }  
  //接受   程序的   头文件——消息映射  
      BEGIN_MESSAGE_MAP  
                VCL_MESSAGE_HANDLER(WM_COPYDATA,     TWMCopyData,     ReceiveMsg);  
      END_MESSAGE_MAP(TWinControl);  
  //发送窗体的调用  
    Send2Msg(Edit1->Text);  
  //接收窗体的接收函数  
  void   __fastcall   TPropertyFrm::ReceiveMsg(TWMCopyData       Msg)  
  {  
          AnsiString   str;  
          str   =   StrPas((char*)Msg.CopyDataStruct->lpData);  
          ReplyMessage(1);  
          Edit1->Text=str;//显示    
  }  
  Top

3 楼fatwave(风中的雨)回复于 2003-11-03 16:34:08 得分 10

看看CKer写的关于消息机制的文章   很有用的!!  
   
  深入VCL   理解BCB的消息机制   (一)         cker(原作)  
  http://www.csdn.net/develop/read_article.asp?id=8131Top

4 楼fatwave(风中的雨)回复于 2003-11-05 16:25:40 得分 10

to:yjy1001(优秀得郁闷的鱼)代码有些问题  
  void   __fastcall   TMainFrm::Send2Msg(AnsiString   Msg)  
  {  
      TCopyDataStruct   ds;  
      ds.cbData   =   Msg.Length()   +   1;  
      ds.lpData   =   SysGetMem(ds.cbData   );  
      StrCopy   ((char*)ds.lpData,   Msg.c_str());  
      SendMessage(Handle,   WM_COPYDATA,   0,   Cardinal(&ds));  
      SysFreeMem(ds.lpData);  
  }  
   
  就可以了!!  
  Top

5 楼byzxy(byzxy)回复于 2003-11-05 16:39:43 得分 30

在头文件中自定义消息:  
  #define     WM_BY   (WM_USER   +   800)  
  和消息映射  
          BEGIN_MESSAGE_MAP  
                  VCL_MESSAGE_HANDLER(WM_BY,   Messages::TMessage,   showMessage)  
          END_MESSAGE_MAP(TForm)  
  窗体文件定义一个按钮  
   
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
          char   *   p   =   "落霞与突兀齐飞,秋水共海天一色。";  
          SendMessage(Handle,WM_BY,(long)p,0);  
  }  
  //---------------------------------------------------------------------------  
  void   TForm1::showMessage(Messages::TMessage   message)  
  {  
          char   *p   =   (char*)message.WParam;  
          ShowMessage(p);  
  }  
  这样可以传递指针。不过不同进程间该指针不能正确使用。Top

相关问题

  • MessageBox自定义???
  • 自定义tag
  • 自定义问题
  • 自定义消息。。
  • 自定义事件
  • 自定义消息!
  • 自定义控件
  • 自定义鼠标!
  • 自定义报表
  • 自定义消息

关键词

  • c++builder
  • 消息
  • vcl
  • ds
  • 结构
  • borland
  • 自定义
  • twmgetminmaxinfo
  • 参数
  • minmaxinfo

得分解答快速导航

  • 帖主:82wds
  • netying
  • yjy1001
  • fatwave
  • fatwave
  • byzxy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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