方法1、重载WndProc
private: // User declarations
void __fastcall WndProc(Messages::TMessage &Message);
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
if (Message.Msg == WM_MOUSEWHEEL && Message.WParam )
{
Caption = Now();
}
TForm::WndProc(Message);
}windows
方法二 、消息映射函数
使用消息映射,通常须要三步:
(1).声明消息映射表,把某些消息的处理权,交给本身定义的函数
以一个没有参数的BEGIN_MESSAGE_MAP宏开始,
以END_MESSAGE_MAP宏结束(惟一参数是组件的父类的名字,一般为TForm)
在中间插入一个或多个MESSAGE_HANDLER宏,其将一个消息句柄和一个消息处理函数联系在一块儿。
MESSAGE_HANDLER(windows消息名,消息结构体名,消息处理函数名)
(2)声明消息处理函数
函数名称和参数必须和MESSAGE_HANDLER宏定义的同样
(3)实现消息处理函数
与通常类函数差很少,只是在最后加上一条语句,完成VCL对消息的默认处理
TForm::Dispatch(&Message);测试
VCL_MESSAGE_HANDLER写法,是为了调用ATL时,命名不冲突
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
private: // User declarations
void __fastcall OnEditMouseWell(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_MOUSEWHEEL, TMessage, OnEditMouseWell)
END_MESSAGE_MAP(TForm)
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
void __fastcall TForm1::OnEditMouseWell(TMessage &Message)
{
if(String(ActiveControl->ClassName())=="TEdit") //全部的Edit
Caption = Now(); //测试
//TForm::Dispatch(&Msg);
}
方法3、重载WindowProc
void __fastcall OnEditMouseWell(Messages::TMessage &Message); //增长
Classes::TWndMethod OldEdit1WndProc; //增长
void __fastcall TForm1::OnEditMouseWell(Messages::TMessage &Message)
{
if (Message.Msg == WM_MOUSEWHEEL)
{
//::MessageBox(NULL,"OK","Message",0); //测试
Caption = Now();
}
else
OldEdit1WndProc(Message);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OldEdit1WndProc=Edit1->WindowProc;
Edit1->WindowProc=OnEditMouseWell;
}spa