有谁能够解释以下delphi的vcl中的窗口消息分配是如何运行的。
hdqqq 2005-05-06 10:19:27 最近要把一个delphi的库移植成c++的代码,在看delphi的代码,在看到有关vcl中的组件的窗口消息处理的部分的时候,有点疑问,delphi对窗口的消息进行了更高级的封装,我看到有个tmessage类,现在在看vcl的代码的时候有点问题,对于delphi中的form和button来说,可以使用事件响应过程来对相应的消息进行处理,我看了一下delphi的代码,TForm就有一个属性OnMouseMove,然后在编程的时候,在f11调出的object inspector窗口中把对应的procedure设置好,在mousemove的时候,就会调用这个过程,也就是说,在程序运行的时候,发生的wm_mousemove消息,程序会调用OnMouseMove属性中设置的过程进行处理,但是,我不知道这里面具体实现的细节是这么个样子。
还有,从TComponent中继承的类都有代表父子关系的成员可以调用,也就是说一个button可以取得包含它的窗口,一个form窗口可以取得在其中的所有子component,由于没有对vcl库的代码进一步的了解,我不知道发生在一个button上的mousemove消息是如何被处理的,是直接被发送到button的窗口过程还是先被发送到form的窗口处理过程,然后通过查找,找到对应的button再进行处理的。
我想问的是:
vcl中的一个窗口程序消息处理的流程大概是怎么一个样子的。
对于form中的子component,其消息的发送是怎样一个过程,
是只有form一级的类有窗口消息处理函数,消息先分发到form的消息处理过程,然后通过一定的方式找到子组件并进行处理
还是没一种带有窗口的组件都有消息处理过程,消息被直接分发到对应的组件的消息处理过程。
希望熟悉vcl库的人指教一下,谢谢。