最近对消息的传递很是疑惑,
做了个试验,截获wm_keydown消息
分别在下面4个地方跟踪消息,
1,application.OnMessage中
2,窗体的wndproc方法中(在inherited之前)
3.memo控件的onkeydown事件
4.memo的父控件tmyPanel控件的wndproc方法(在inherited之前)
tmyPanel只是简单的继承tpanel,重载它的wndproc方法而已在memo中进行录入字符,
首先,4个地方都跟踪到了消息,
但4者执行顺序是1-4-2-3,
可见自application分发消息后,消息经过了memo控件的wndproc,又依次经过了memo控件的父窗口。
这个向上传递的规则是windows自有的吗?还是vcl处理的?所有的windows消息都会向上传递吗?
另外,在父窗口传递过程中(上例的2,4中),本来是wm_keydown($100)的消息,变成了$B02E这又是根据什么规则来变的呢?
做了个试验,截获wm_keydown消息
分别在下面4个地方跟踪消息,
1,application.OnMessage中
2,窗体的wndproc方法中(在inherited之前)
3.memo控件的onkeydown事件
4.memo的父控件tmyPanel控件的wndproc方法(在inherited之前)
tmyPanel只是简单的继承tpanel,重载它的wndproc方法而已在memo中进行录入字符,
首先,4个地方都跟踪到了消息,
但4者执行顺序是1-4-2-3,
可见自application分发消息后,消息经过了memo控件的wndproc,又依次经过了memo控件的父窗口。
这个向上传递的规则是windows自有的吗?还是vcl处理的?所有的windows消息都会向上传递吗?
另外,在父窗口传递过程中(上例的2,4中),本来是wm_keydown($100)的消息,变成了$B02E这又是根据什么规则来变的呢?
离开M a i n W n d P r o c ( )后,消息被传递给对象的W n d P r o c ( )方法,然后进入V C L的派发机制。派发机制即D i s p a t c h ( )方法把消息派发给一个消息句柄。
消息到达处理该消息的处理过程后,经过处理过程的处理和最后的i n h e r i t e d语句,消息来到对象的D e f a u l t H a n d l e r ( )。这个方法对消息进行最后的处理,然后把消息传递给Wi n d o w s的D e f Wi n d o w P r o c ( )函数或其他默认的窗口过程。
你去找点文章看看啊
强烈建议你去看 <<Delphi 5开发人员指南>>的第五章