Chinaunix首页 | 论坛 | 博客
  • 博客访问: 539248
  • 博文数量: 252
  • 博客积分: 6057
  • 博客等级: 准将
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-21 10:17
文章分类

全部博文(252)

文章存档

2013年(1)

2012年(1)

2011年(32)

2010年(212)

2009年(6)

分类: WINDOWS

2010-08-23 20:07:38

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;其它的消息    
 响应
方法与此相同。   

消息的发送
void   _fastcall   TForm1::Button1Click(TObject   *Sender)//发送自定义消息  
  {  
      Perform(WM_YOURMESSAGE,0,0);  
  }  


  #define   WM_USER_MESSAGE   999999  
   
  SendMessage(Hwnd,WM_USER_MESSAGE,L,R);  
   
  L,R为你想传送的内容

,在头文件(.h)中:  
  #define   WM_MYMESSAGE   WM_USER+1         //自定义消息名称与消息号,WM_USER是由系统定义的用户自定义消息可以使用的最小号  
   
   
  2,仍在头文件中:  
  class   TForm1:public   TForm  
  {  
  private:  
          //自定义消息响应函数  
          void   __fastcall   MyMessage(TMessage   &Message);  
   
  public:  
          //建立消息映射关系  
          BEGIN_MESSAGE_MAP          
                  VCL_MESSAGE_HANDLER(WM_MYMESSAGE,   TMessage,   MyMessage);  
          END_MESSAGE_MAP(TForm);          
  };  
   
  3,在实现文件中,声明自定义消息响应函数:  
  void   __fastcall   TForm1::MyMessage(TMessage   &Message)          
  {  
      ....  
  }  
   
  4,发送自定义消息的方法:  
  {  
      PostMessage(Form1->Handle,   UM_MYMESSAGE,   0,   0);          
  } 


阅读(1145) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~