A ----windows消息类型
TMsg 记录类型,在windows单元中定义
Type
TMsg=PackedRecord
HWnd:HWND;//窗口句柄
Message:UNIT;//消息常量标示符
WParam:WPARAM;//32为消息的特定附加信息
LParam:LPARAM;//32为消息的特定附加信息
time:DWORD;//消息创建时间
pt:TPoint;//消息创建时的鼠标坐标位置
end;
win32定义的消息常量以VM开头,表示特定的消息,在delphi中Message单元定义了所有的windows消息。
消息的结构都是纪录,占用12个字节大小。
B---消息的产生到被相应的过程:
1-系统中发生了某个事件
2-windows将这个事件翻译成消息,放入消息队列
3-程序接受这个消息,并且存入TMsg中
4-程序将消息传递给相应的窗口
5-窗口响应消息,执行操作
C--delphi中的消息机制
在delphi中每个窗口和vcl组件固有一个消息接受例程MainWndProc-----定义在TWincontrol中的一个静态方法。
Procedure MainWndProc(Var Message:TMessage);他不直接处理消息,而是提交给WndProc来处理。
Procedure WndProc(Var Message:TMessage);Virtual;--在此过程中可以自己添加处理消息的代码。
WndProc调用Dispatch来分配消息(Dispatch在TObject根类中定义,他的参数必须是一个记录类型,并且必须有一个Cardinal类型的域)。
Dispatch将根据消息号码调用相应的处理消息的方法。
D--发送消息的方法
perform()--- SendMessage()--PostMessage()--
在程序中发送消息给自己,只需要定义一个消息常量(WM_USER+100到$7FFF范围内)。
然后声明和定义个处理消息的过程,比如:
。。
Private
Procedure doMyMessage(var Message:TMessage);message VM_myMessage;
程序间传递消息-调用RegisterWindowMessage()
广播消息-Broadcast()
E--消息处理之重构WndProc
procedure TMyObject.WndProc(var message:TMessage);
begin
//判断是否处理该消息
inherited WndProc(message);
//为处理的消息交给父类WndProc处理
end;