如何自定义一个系统没有的消息(不懂的也可以进来学习学习)

gyj_china 2003-05-08 10:36:54
我想定义一个系统没有的消息
Unit1.h
...
#define WM_MYMSG WM_USER+100;
...
public:
void __fastcast MSG(TMessage &msg);

BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_MYMSG, TMessage, MSG)
END_MESSAGE_MAP(TForm);
...

Unit1.cpp
...
void __fastcast TForm::Button1Click(..)
{
SendMessage(Handle,WM_MYMSG,0,0);
}
-------------------------------------
void __fastcast TForm::MSG(TMessage &msg)
{
if (msg.msg == WM_MYMSG)
ShowMessage("OK");
}
为什么会有错???我换成系统自已的消息就行了,但会出现一处警告。
请写个这方面程序的朋友帮个忙。我想可能是我的声明有问题?
...全文
32 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
csd08 2003-05-08
  • 打赏
  • 举报
回复
用不着这么麻烦吧,你可以先如下定义消息:
UINT MsgData=RegisterWindowMessage("UserMsg"); //用户定义的消息
然后就可以发送了
SendMessage(Handle,WM_MsgData,0,0);
接收可以放在Form的Dispatch重载函数中
void __fastcall TForm1::Dispatch(void * Message)
{
TForm::Dispatch(Message);
PMessage pMsg=(PMessage)Message;
if(pMsg->Msg==MsgData) ShowMessage("OK"); //接收消息
}

记得在头文件中声明:
void __fastcall Dispatch(void * Message);//最好在private部分声明


chifengwatch 2003-05-08
  • 打赏
  • 举报
回复
按楼主的意思 我替你整理
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
SendMessage(Handle,WM_MYMSG,0,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MSG(TMessage &msg)
{
if (msg.Msg == WM_MYMSG)
ShowMessage("OK");
}


//////////////////////////////////////////////////////
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>

#define WM_MYMSG WM_USER+100

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
void __fastcall MSG(TMessage &msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_MYMSG, TMessage, MSG)
END_MESSAGE_MAP(TForm);
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


xuv2002 2003-05-08
  • 打赏
  • 举报
回复
看我的答复,记住#define 的用法,可是全部代替,
照你的写法
#define WM_MYMSG WM_USER+100;

用到WM_MYMSG 的地方都会用WM_USER+100;来代替的 去掉分号,然后更正那些书写错误就可以了
chifengwatch 2003-05-08
  • 打赏
  • 举报
回复
同意xuv2002(4舍523)
确实帖子中有错误
例:
if (msg.msg == WM_MYMSG)

if (msg.Msg == WM_MYMSG)

__fastcast

__fastcall
gyj_china 2003-05-08
  • 打赏
  • 举报
回复
我的U盘没带来,我记得好像是这样写的。

有错误,帮忙更正一下,拜托。
xuv2002 2003-05-08
  • 打赏
  • 举报
回复
挺好的呀,你是不是书写错误
#define WM_MYMSG WM_USER+100; //去掉这个分号";"

另:你的帖子好多书写错误
道素 2003-05-08
  • 打赏
  • 举报
回复
我来学习

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧