重载WndProcWindowProc消息映射BEGIN_MESSAGE_MA 转载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重载WndProcWindowProc消息映射BEGIN_MESSAGE_MA 转载相关的知识,希望对你有一定的参考价值。

方法一、重载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);
}

方法二 、消息映射

使用消息映射,一般需要三步:
  (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);
}
方法三、重载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;
}

以上是关于重载WndProcWindowProc消息映射BEGIN_MESSAGE_MA 转载的主要内容,如果未能解决你的问题,请参考以下文章

MFC树形控件响应

myBatis mapper接口方法重载问题

HDU 3682 To Be an Dream Architect:查重三维坐标系中点在实数上的映射

java.lang.ClassCastException: java.lang.String cannot be cast to com.jy.hfims.domain 映射实体类型错误

Docker容器——容器端口映射

出现了错误。详细消息: 3 uncommitted changes would be overwritten by merge