从前现在过去便再不来 红红落叶长埋尘土内 开始终结总是没变改 天边的你飘泊白云外 苦海翻起爱恨 在世间难逃离命运 相亲竟不可接近 或我应该相信是缘分 情人别后永远再不来 无言独坐放眼尘世外 鲜花虽会凋谢但会再开 一生所爱隐约在白云外 ————《大话西游》
C++Builder虽然和Delphi用的是同一个VCL库,但C++Builder中对自定义消息的声明和处理却和Delphi的不一样。 首先,要在相应的头文件里添加如下代码: #include <vcl\Messages.hpp> //要用到的头文件 #define CM_MyMsg (WM_USER+400) //CM_MyMsg为自定义的消息 void __fastcall WMSysCommand(TWMSysCommand &Message); //在头文件中定义相应消息的处理函数 BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_SYSCOMMAND, TWMSysCommand, WMSysCommand) END_MESSAGE_MAP(TForm) //用自定义的消息处理函数来代替原消息处理函数
然后在相应的文件中加入: void __fastcall TForm1::WMSysCommand(TWMSysCommand &Message) { switch(Message.CmdType) { case CM_YouMessage: ... //添加你自已的代码 break; default: TForm::Dispatch(&Message); //用它来处理其它消息 } } //这是窗体的新建过程 void __fastcall TForm1::FormCreate(TObject *Sender) { HMENU SysHMenu; SysHMenu=GetSystemMenu(Handle,false); AppendMenu(SysHMenu,MF_STRING,CM_MyMsg,"你好"); }
--------------------------------------------------------------------------------
Delphi 在Delphi中就比C++ Builder简单多了:
首先,在TForm类的Pravite中加入这句用于覆盖缺省的消息处理 procedure WMSysCommand(var message:TMessage) ; message WM_SYSCOMMAND;
在常量定义中加入这句用于定义自定义消息 CM_MyMsg = WM_USER + 400;
在Form的OnCreate事件中为系统菜单添加新的菜单项 procedure TForm1.FormCreate(Sender: TObject); var SysHMenu : HMENU; begin SysHMenu:=GetSystemMenu(Handle,False); AppendMenu(SysHMenu,MF_STRING,CM_MyMsg,'你好'); end;
消息处理函数 procedure TForm1.WMSysCommand(var message:TMessage); begin case message.WParam of CM_MyMsg: Application.MessageBox('你好','',MB_OK); else inherited; end; end;

|