Inprise(Borland) C++Builder中,可以象在Delphi中一样响应消息,
只是看起来要稍复杂一点。
对于系统已定义的消息,可以直接响应:
#define WM_MY_OPEN_CMDLINE_FILE (WM_USER+1) //进程间通讯的自定义消息
#define WM_MY_SEARCH_NODE (WM_USER+2) //查找命令的自定义消息
class TSomeForm : public TForm
{
//...类中的其它代码
protected:
//消息的响应过程
void __fastcall OpenCmdLineFile(TMessage Message);
void __fastcall SearchDocumentNode(TMessage Message);
void __fastcall GetWindowMinMaxInfo(TWMGetMinMaxInfo Message);
//以下通过宏定义实现消息的正确响应
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_MY_OPEN_CMDLINE_FILE, TMessage, OpenCmdLineFile)
MESSAGE_HANDLER(WM_MY_SEARCH_NODE, TMessage, SearchDocumentNode)
MESSAGE_HANDLER(WM_GETMINMAXINFO , TWMGetMinMaxInfo, GetWindowMinMaxIn
fo)
END_MESSAGE_MAP(TForm)
};//end class
//以下为实现代码
void __fastcall TSomeForm::OpenCmdLineFile(TMessage Message)
{//直接通过消息结构传递参数
LPSTR lpCmdLine=(LPSTR)Message.LParam;//从Message中取得参数
this->HandleCmdLineFile(lpCmdLine);//处理命令行的参数
return;
}
void __fastcall TSomeForm::SearchDocumentNode(TMessage Message)
{//响应查找消息
//Message中的参数在此处不需要。
this->SearchNode();
return;
}
void __fastcall TSomeForm::GetWindowMinMaxInfo(TWMGetMinMaxInfo Messag
e)
{//设置主窗口的最小尺寸
MINMAXINFO *MinMaxInfo=Message.MinMaxInfo;
MinMaxInfo->ptMinTrackSize.x=400;
MinMaxInfo->ptMinTrackSize.y=300;
return;
}
其中:TMessage和TWMGetMinMaxInfo类型的定义可参见:
C:\Program Files\Borland\CBuilder\inlucde\vcl\Messages.hpp;其它的消息
响应方法与此相同。
消息的发送
void _fastcall TForm1::Button1Click(TObject *Sender)//发送自定义消息
{
Perform(WM_YOURMESSAGE,0,0);
}
#define WM_USER_MESSAGE 999999
SendMessage(Hwnd,WM_USER_MESSAGE,L,R);
L,R为你想传送的内容
,在头文件(.h)中:
#define WM_MYMESSAGE WM_USER+1 //自定义消息名称与消息号,WM_USER是由系统定义的用户自定义消息可以使用的最小号
2,仍在头文件中:
class TForm1:public TForm
{
private:
//自定义消息响应函数
void __fastcall MyMessage(TMessage &Message);
public:
//建立消息映射关系
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_MYMESSAGE, TMessage, MyMessage);
END_MESSAGE_MAP(TForm);
};
3,在实现文件中,声明自定义消息响应函数:
void __fastcall TForm1::MyMessage(TMessage &Message)
{
....
}
4,发送自定义消息的方法:
{
PostMessage(Form1->Handle, UM_MYMESSAGE, 0, 0);
}
阅读(1145) | 评论(0) | 转发(0) |