在C++ Builder中定義事件 (轉)
在C++ BUILDER中,事件是一種委託模型,它是對訊息的封裝。如果你用過VC,你就知道在VC中並不存在什麼事件,而只有訊息處理,而在C++ BUILDER中則是由事件處理函式來負責響應訊息。同是,事件本身也是一指標,它是一個閉包,通常在C++ BUILDER中有兩種事件:通知型別事件(即TNOTIFYEVENT,對訊息的封裝)和自定義事件。除此之外,我們也知道事件是透過一個虛擬函式來點燃的,比如說ONEXIT事件是由DOEXIT虛擬函式點燃的,下面我寫一個自定義事件,很明顯以下我寫的程式碼中的事件將是對WM_MYMESSAGE訊息的封裝.
.h File
#include <....>
.....
#define WM_MYMESSAGE WM_USER+100
typedef void __fastcall (__closure *TMyEvent)(T *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 yEvent(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 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事件,和其它事件一樣,只要將程式碼寫到這裡來就可以響應訊息並根據應用的需求來給出這個事件觸發時的行為,上面程式碼是隨手寫的,請各位自已加以調整.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992472/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++中類及類的定義 (轉)C++
- c++ builder中的ado使用 (轉)C++UI
- 用C++ Builder在桌面上畫圖 (轉)C++UI
- 用C++ Builder來定製系統選單(轉)C++UI
- Automation In C++ Builder (轉)C++UI
- 使用jQuery在javascript中自定義事件jQueryJavaScript事件
- C++中巨集定義#define的用法C++
- c++ builder裡四種處理“滑鼠離開窗體”事件的方法 (轉)C++UI事件
- 怎樣在C++Builder中建立使用DLL (轉)UI
- Borland C++ Builder的API後門 (轉)C++UIAPI
- 在C++Builder中建立共享記憶體段 (轉)C++UI記憶體
- 在C++ Builder中使用ActiveX控制元件顯示Flash動畫 (轉)C++UI控制元件動畫
- 教你在Java介面中定義方法Java
- 在inputrc中定義多重熱鍵(如Ctrl+Alt+H)(轉)
- C++ Builder 初學問與答 (十一) (轉)C++UI
- C++ Builder 初學問與答 (十二) (轉)C++UI
- C++ Builder 初學問與答(三) (轉)C++UI
- C++ Builder 初學問與答(八) (轉)C++UI
- 在C++Builder中建立Access odbc資料來源 (轉)C++UI
- SAP Gateway Service Builder 裡的 OData Model 定義方式GatewayUI
- 在C++ Builder3下實現程式自動執行的方法 (轉)C++UI
- C++型別轉換時定義非成員函式(轉)C++型別函式
- C/C++—— C++中定義虛解構函式的原因C++函式
- 用C++ Builder中的TServerSocket,TClientSocket來寫網路通訊程式 (轉)C++UIServerclient
- C++巨集定義#defineC++
- C++ 宣告與定義C++
- 在python中定義[]呼叫的方法Python
- C++ BUILDER 訊息處理的深入探索 (轉)C++UI
- Javascript中自定義事件JavaScript事件
- 在vue專案中自定義事件匯流排eventHubVue事件
- C++ 前置定義 Forward declarationC++Forward
- c++中&含義C++
- 在C++Builder使用TTS(Text To Speech) (轉)C++UITTS
- Visual C++與Delphi/C++Builder之比較 (轉)C++UI
- 用C++ Builder檢測Windows的啟動模式(轉)C++UIWindows模式
- C++中過載、重寫、重定義的區別C++
- c++中模板_類别範本的宣告和定義C++
- Eloquent ORM 自定義 builderORMUI