在C++ Builder中定义事件

转载 2004年12月29日 22:18:00

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

http://www.csdn.com.cn/program/7422.htm

C++ builder 中键盘值(Virtual key)

VK_LBUTTON Left   mouse   button   VK_RBUTTON Right   mouse   button   VK_CANCEL Control+Break   VK_...
  • syrchina
  • syrchina
  • 2011年07月19日 17:47
  • 2180

Microsoft Visual C++ 和 Borland C++ Builder 之比较

来源:百度(最原始的地方未知,我大概整理了一下格式)。           本文就试图从技术水平、易用性、稳定性、发展前景等对Visual   C++和C++Builder(Delphi)这两个重量级...
  • stpeace
  • stpeace
  • 2013年10月19日 22:10
  • 23083

Microsoft Visual C++ 和 Borland C++ Builder 之比较

本文就试图从技术水平、易用性、稳定性、发展前景等对Visual   C++和C++Builder(Delphi)这两个重量级开发工具进行比较分析。                由于Delphi与...
  • u012092924
  • u012092924
  • 2017年11月25日 17:51
  • 341

使用 C++ Builder 创建应用程序

3.1 创建应用程序 C++Builder的主要用途于设计创建Windows应用程序。有三种基本的Windows应用程序: · WindowsGUI应用程序。 · 控制面板应用程序。 · 服务应用程序...
  • u010984552
  • u010984552
  • 2016年08月19日 20:18
  • 2123

c++builder6彻底研究

  • 2017年02月21日 22:31
  • 57.54MB
  • 下载

C++ builder消息的运用

一、TApplication的OnMessage事件 OnMessage事件只处理消息队列中的消息,SendMessage()发送的消息不会被截获。 任何窗体接收到一个windows消息,都会触发...
  • u010984552
  • u010984552
  • 2016年07月26日 19:07
  • 1846

C++Builder建立及调用DLL

C++Builder建立及调用DLL DLL简称动态链接库,是Windows中程序的重要组成部分。想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程 序分为好几个模块,团队...
  • qq_36096752
  • qq_36096752
  • 2016年11月28日 15:37
  • 1493

c++builder大全

  • 2013年05月28日 21:34
  • 1.98MB
  • 下载

VS2010调试C++ Builder程序

解决方案资源管理器->右键 属性->配置属性->调试-> 命令 浏览到BCB编写的的EXE程序,双击。此时命令后面会出现加粗的EXE的绝对路径。点击确定按钮。 然后在VS2010的cpp文件中设置断...
  • coperator
  • coperator
  • 2013年12月31日 22:42
  • 1233

满世界都是书

1.C++ Primer英文版: http://computerstep.w18.net/C/C++%20Primer.zip 2.Effective C++中文版: http://dlb....
  • suya
  • suya
  • 2006年04月11日 11:21
  • 1146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在C++ Builder中定义事件
举报原因:
原因补充:

(最多只允许输入30个字)