当前位置:天才代写 > tutorial > C语言/C++ 教程 > 在C++ Builder中界说事件

在C++ Builder中界说事件

2017-11-04 08:00 星期六 所属: C语言/C++ 教程 浏览:598

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

 

    关键字:

天才代写-代写联系方式