Delphi的消息处理流程

I

import

Unregistered / Unconfirmed
GUEST, unregistred user!
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
 
顶部