网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > 其他类别 > 正文

在C++Builder中定义事件

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/07/21

网学网为需要其他类别的朋友们搜集整理了在C++Builder中定义事件相关资料,希望对各位网友有所帮助!

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

  • 上一篇资讯: [其他类别]
  • 下一篇资讯: C++ Buidler 6要注意的问题
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号