首页  编辑  

Delphi的消息处理流程

Tags: /超级猛料/Message.消息和事件/   Date Created:

TApplication.O n M e s s a g e 只在应用程序的消息队列接收到一个消息时才被触发(在第5 章中有关于消

息的讨论)。一般应用程序接收到的消息是与窗口管理有关的消息(例如W M _ PA I N T 和W M _ S I Z E ) ,或由

P o s t M e s s a g e ( )、P o s t A p p M e s s a g e ( )或B r o a d c a s t S y s t e m M e s s a g e ( )等A P I 函数发送出的消息。但是,由于

Wi n d o w s 或S e n d M e s s a g e ( )有可能会绕过消息队列直接将消息发送给窗口过程。当发生这种情况时,

TA p p l i c a t i o n . O n M e s s a g e 就不会被触发。

VCL的消息系统:

VCL定义了消息分发系统,该系统将所有的Windows消息传给相应的对象,由各对象的消息

分发系统进行处理。

VCL对象用于接受消息的方法叫做MainWndProc()。通过MainWndPorc()可以对消息进行任何

的处理。不过,一般情况下很少直接调用MainWndProc()来处理消息,除非不想让消息通过

VCL的消息系统分发。

从MainWndProc()反回后,消息被传递给对象的WndProc()的方法,这就是该对象的窗体

过程,然后进入VCL的分发机构。分发机构使用Disptch()方法把消息分发给一个消息句柄。

消息到达该消息的处理句柄(Handler)后,经过该句柄的处理,这个消息处理过程就结束

了。

事件--MainWndProc---WndProc----Dispatch----Handle