您的位置:首页 -> 软件教程 -> 教程专题 -> C++ Builder教程专题 -> C++ Builder新手入门
软件教程分类查找
办公软件 图形图像 视频播放 格式转换 手机辅助 系统工具 电脑学习 下载工具 浏览器 QQ 专区 聊天 输入法 安全杀毒
精品软件课程
更多>>

在C++Builder中定义事件

9.2
出处:2345软件大全 时间:2011-06-27 人气:11149

核心提示:在C++ BUILDER中,事件是一种委托模型,它是对消息的封装。如果你用过VC,你就知道在VC中并不存在什么事件

  在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事件,和其它事件一样,用户只要将代码写到这里来就可以响应消息并根据应用的需求来给出这个事件触发时的行为,上面代码是随手写的,请各位自已加以调整。