Welcome 微信登录

首页 / 操作系统 / Linux / C++ 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 <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- 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 <vcl.h> #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; }