在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++ Builder 2007六月上市 (C/C++) (News)C++UI
- C++中巨集定義#define的用法C++
- SAP Gateway Service Builder 裡的 OData Model 定義方式GatewayUI
- Eloquent ORM 自定義 builderORMUI
- C++ 前置定義 Forward declarationC++Forward
- 在vue專案中自定義事件匯流排eventHubVue事件
- Javascript中自定義事件JavaScript事件
- C++中過載、重寫、重定義的區別C++
- 學會在 C++ 中使用變數:從定義到實踐C++變數
- vue 在methods中定義的函式 not definedVue函式
- C++學習 類定義(一)C++
- 在定義C++, C通用介面函式時讓C++介面支援預設引數C++函式
- C++ Builder XE10 關於Panel1屬性的設定C++UI
- 0x03. 使用巨集定義事件事件
- 在 MotionScene 檔案中定義場景約束
- 在Qml 中定義訊號並如何觸發
- 在Java中是如何定義和宣告介面的?Java
- Nuxt.js 應用中的 builder:generateApp 事件鉤子詳解UXJSUIAPP事件
- Nuxt.js 應用中的 builder:watch 事件鉤子詳解UXJSUI事件
- c++繼承,隱藏(重定義)C++繼承
- C/C++的轉義字元詳解C++字元
- 在KEIL MDK中定義變數到固定地址變數
- zsh 命令在 alias 中如何轉義 ' 字元(單引號)字元
- C++入門教程(12):定義函式C++函式
- C++中&和*的含義C++
- Random 專案總結 -12 定義定時器,繫結事件random定時器事件
- 在jQuery定義自己函式jQuery函式
- C++教程-----C++變數型別和變數的定義C++變數型別
- Unity觸控式螢幕觸控事件定義Unity事件
- BI中事實表和維度表的定義(轉載)
- [C++]變數宣告與定義的規則C++變數
- 自定義RadiusBackgroundSpan在textview設定tagTextView
- oracle Forms Builder常用函式 (轉載)OracleORMUI函式
- 在程式中定義多個同值不同名的變數變數
- 在 C 中引用匯編語言定義的 .globl 變數變數
- 方太廚電,在整合智慧中定義烹飪美學
- 在 Apache Cassandra 中定義和最佳化資料分割槽Apache
- 關於轉義符 在php正則中的匹配問題PHP
- C++ 定義靜態成員 static 關鍵字不能在定義出重複出現C++