程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 在C++ Builder中定義事件

在C++ Builder中定義事件

編輯:關於C++

在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事件,和其它事件一樣,用戶只要將代碼寫到這裡來就可以響應消息並根據應用的需求來給出這個事件觸發時的行為,上面代碼是隨手寫的,請各位自已加以調整。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved