设为首页 加入收藏

TOP

C++builder消息的运用
2014-11-15 20:20:27 】 浏览:7414
Tags:builder 消息 运用

  一、TApplication的OnMessage事件


  OnMessage事件只处理消息队列中的消息,SendMessage()发送的消息不会被截获。


  任何窗体接收到一个windows消息,都会触发一次此事件


  函数原型:


  typedef void __fastcall (__closure *TMessageEvent) (tagMSG &Msg,bool &Handled);


  Msg表示被截获的消息,Handled表示是否处理完成,为TRUE则防止被再次处理,设为FALSE则可以继续处理。


  代码


  //计算程序响应的消息数


  //---------------------------------------------------------------------------


  #ifndef Msg_testH


  #define Msg_testH


  //---------------------------------------------------------------------------


  #include


  #include


  #include


  #include


  //---------------------------------------------------------------------------


  class TForm1 : public TForm


  {


  __published: // IDE-managed Components


  TLabel *Label1;


  void __fastcall FormCreate(TObject *Sender);


  private: // User declarations


  //自定义消息响应函数


  void __fastcall AppMessage(tagMSG &MSG,bool &Handled);


  public: // User declarations


  __fastcall TForm1(TComponent* Owner);


  int Num;


  };


  //---------------------------------------------------------------------------


  extern PACKAGE TForm1 *Form1;


  //---------------------------------------------------------------------------


  #endif


  //---------------------------------------------------------------------------


  #include


  #pragma hdrstop


  #include "Msg_test.h"


  //---------------------------------------------------------------------------


  #pragma package(smart_init)


  #pragma resource "*.dfm"


  TForm1 *Form1;


  //---------------------------------------------------------------------------


  __fastcall TForm1::TForm1(TComponent* Owner)


  : TForm(Owner)


  {


  Num = 0;


  }


  //---------------------------------------------------------------------------


  void __fastcall TForm1::FormCreate(TObject *Sender)


  {


  //将自定义函数与OnMessage事件联系起来


  Application->OnMessage = AppMessage;


  }


  //---------------------------------------------------------------------------


  void __fastcall TForm1::AppMessage(tagMSG &MSG,bool &Handled)


  {


  Num++;


  Label1->Caption = AnsiString(Num);


  Handled = false;


  }


  二、消息映射


  使用消息映射,一般需要三步:


  (1).声明消息映射表,把某些消息的处理权,交给自己定义的函数


  以一个没有参数的BEGIN_MESSAGE_MAP宏开始,


  以END_MESSAGE_MAP宏结束(唯一参数是组件的父类的名字,通常为TForm)


  在中间插入一个或多个MESSAGE_HANDLER宏,其将一个消息句柄和一个消息处理函数联系在一起。


  MESSAGE_HANDLER(windows消息名,消息结构体名,消息处理函数名)


  (2)声明消息处理函数


  函数名称和参数必须和MESSAGE_HANDLER宏定义的一样


  (3)实现消息处理函数


  与一般类函数差不多,只是在最后加上一条语句,完成VCL对消息的默认处理


  TForm::Dispatch(&Message);


  消息映射


  //---------------------------------------------------------------------------


  #ifndef Unit1H


  #define Unit1H


  //---------------------------------------------------------------------------


  #include


  #include


  #include


  #include


  //---------------------------------------------------------------------------


  class TForm1 : public TForm


  {


  __published: // IDE-managed Components


  TLabel *Label1;


  private: // User declarations


  public: // User declarations


  __fastcall TForm1(TComponent* Owner);


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇封装几个关于流IStream的功能函数 下一篇EffectiveC++别让异常逃离析构函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目