• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

有谁能够解释以下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库的人指教一下,谢谢。
...全文
78 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
senfore 2005-05-14
找Delphi5开发人员指南中有专门章节论述,可以到www.2ccc.com下载中文电子版。。。
回复
yeeyee 2005-05-13
1,
TObject,
//分发消息。
procedure Dispatch(var Message); virtual;
//默认消息处理
procedure DefaultHandler(var Message); virtual;
2,
//很多地方
采用了 broadcast 模式 (广播 消息)。
和 Facade 门面模式 发布消息。
3,
FOnClick: TNotifyEvent;
TNotifyEvent
采用了观察者模式。
Inside VCL ,Delphi 模式编程。
4,
慢慢研究。

回复
hdqqq 2005-05-13
自己顶一下,请delphi高手指教一下.
回复
redmoon_line 2005-05-07
关注
回复
bigery 2005-05-06
你可以参考:李维的《VCL架构剖析》,是根据主窗口注册的回调函数提供的机制来处理消息队列中的消息的,用到了堆栈指针,我没有详细看,你可以参考一下!
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4890

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2005-05-06 10:19
社区公告
暂无公告