c++builder 重载WindowProc、WndProc 截获消息
方法一WindowProc
void __fastcall myWindowProc(Messages::TMessage &msg); //增加
Classes::TWndMethod OldWindowProc; //增加
void __fastcall TForm1::myWindowProc(Messages::TMessage &msg)
{ if (msg.Msg == WM_MOUSEWHEEL) { //::MessageBox(NULL,"OK","Message",0); //测试 Caption = Now(); }else
OldWindowProc(Message); }void __fastcall TForm1::FormCreate(TObject *Sender)
{OldWindowProc=Edit1->WindowProc;
Edit1->WindowProc=myWindowProc; }方法二 MESSAGE_MAP
class TForm1 : public TForm
{ __published: // IDE-managed Components TEdit *Edit1;private: // User declarationsvoid __fastcall OnEditMouseWell(TMessage &msg);BEGIN_MESSAGE_MAPMESSAGE_HANDLER(WM_MOUSEWHEEL, TMessage, OnEditMouseWell)
END_MESSAGE_MAP(TForm) //TForm 换成TEdit
public: // User declarations
__fastcall TForm1(TComponent* Owner);};void __fastcall TForm1::OnEditMouseWell(TMessage &msg)
{ if(String(ActiveControl->ClassName())=="TEdit") //所有的Edit Caption = Now(); //测试 //TForm::Dispatch(&Msg);}
方法三 重载 WndProc
private: // User declarations
void __fastcall WndProc(Messages::TMessage &msg);
void __fastcall TForm1::WndProc(Messages::TMessage &msg)
{ if (msgMsg == WM_MOUSEWHEEL && msg.WParam ) { Caption = Now(); } TForm::WndProc(msg);}四、ApplicationEvents控件
窗体上放置ApplicationEvents1控件,在ApplicationEvents1Message事件里判断。
void __fastcall TForm3::ApplicationEvents1Message(tagMSG &Msg, bool &Handled){ if (Msg.hwnd == this->DBGrid1->Handle && Msg.message == WM_MOUSEWHEEL) this->Caption = Now();}
WM_LBUTTONDOWN