在C++Builder中定义事件

来源:网络时间:2011-06-27 18:06:12

  在C++ BUILDER中,事件是一种委托模型,它是对消息的封装。如果你用过VC,你就知道在VC中并不存在什么事件,而只有消息处理函数,而在C++ BUILDER中则是由事件处理函数来负责响应消息。同是,事件本身也是一指针,它是一个闭包,通常在C++ BUILDER中有两种事件:通知类型事件(即TNOTIFYEVENT,对windows消息的封装)和自定义事件。除此之外,我们也知道事件是通过一个虚拟函数来点燃的,比如说ONEXIT事件是由DOEXIT虚拟函数点燃的,下面我写一个自定义事件,很明显以下我写的代码中的事件将是对WM_MYMESSAGE消息的封装。 .h File
  #include <....>
  .....
  #define WM_MYMESSAGE WM_USER+100
  typedef void __fastcall (__closure *TMyEvent)(TObject *Sender,Param1,Param2,......);

  class TMyControl:public TWinControl
  {
  private:
  TMyEvent FOnMyEvent;//保存指向事件的指针.
  void __fastcall DoSomething(TMessage &Message);
  public:
  BEGIN_MESSAGE_MAP
  VCL_MESSAGE_HANDLER(WM_MYMESSAGE,TMessage,DoSomething);
  END_MESSAGE_MAP(TControl);
  protected:
  virtual void __fastcall DoMyEvent(Param1,........);//由这个虚拟函数来触发事件
  virtual void __fastcall WndProc(TMessage &Message);
  __published:
  .........
  __property TMyEvent OnMyEvent={read=FOnMyEvent,write=FOnMyEvent};
  .....
  };

  .cpp File

  //Omiting constructor and deconstructor
  //Virtual function,which will spring the event:TMyEvent
  void __fastcall TMyControl::DoMyEvent(Param1,.....)
  {
  if(FOnMyEvent)
  {
  FOnMyEvent(this,Param1,Param2,.....Paramn);
  }
  }
  //Message Handler
  void __fastcall TMyControl::DoSomething
  {
  //TODO:Add your code here....
  }
  void __fastcall TMyControl::WndProc(TMessage &Message)
  {
  if(Message.Msg==WM_MYMESSAGE)
  {
  DoMyEvent(Message.WParam,.....);
  }
  ......
  }
  
  按照上而的代码,我们就会在OBJECT INSPECTOR中看到一个ONMYEVENT事件,和其它事件一样,用户只要将代码写到这里来就可以响应消息并根据应用的需求来给出这个事件触发时的行为,上面代码是随手写的,请各位自已加以调整。

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站) 联系邮箱:rjfawu@163.com
多特网友 2013-08-14 11:41:42 回复
我是新手  不懂
多特网友 2012-06-13 16:03:40 回复
dll注入咋回事说一下呗
多特网友 2012-05-03 01:26:49 回复
不知道C++ builder上数据库该怎么构建
多特网友 2014-04-03 16:13:35
看不懂啊哎
多特网友 2012-05-03 01:26:49 回复
不知道C++ builder上数据库该怎么构建
多特网友 2014-04-03 16:13:35
看不懂啊哎
多特网友 2012-06-13 16:03:40 回复
dll注入咋回事说一下呗
多特网友 2013-08-14 11:41:42 回复
我是新手  不懂