在C++Builder定义事件是怎么回事

 我来答
梦国飞
2016-12-28 · 知道合伙人数码行家
梦国飞
知道合伙人数码行家
采纳数:24846 获赞数:60343
学校三等奖学金

向TA提问 私信TA
展开全部
在C++ BUILDER中,事件是一种委托模型,它是对消息的封装。如果你用过VC,你就知道在VC中并不存在什么事件,而只有消息处理函数,而在C++ BUILDER中则是由事件处理函数来负责响应消息。同是,事件本身也是一指针,它是一个闭包,通常在C++ BUILDER中有两种事件:通知类型事件(即TNOTIFYEVENT,对WINDOWS消息的封装)和自定义事件。除此之外,我们也知道事件是通过一个虚拟函数来点燃的,比如说ONEXIT事件是由DOEXIT虚拟函数点燃的,下面我写一个C++Builder定义事件,很明显以下我写的代码中的事件将是对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事件,和其它事件一样,用户只要将代码写到这里来就可以响应消息并根据应用的需求来给出这个事件触发时的行为
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式