delphi win32 编程系列之一

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;

Published At
Categories with Web编程
Tagged with
comments powered by Disqus