Delphi 消息机制学习笔记
来源:互联网
作者:西部数码
时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
if Message.NotifyCode = BN_CLICKED then
if FindControl(Message.Ctl) = btnRegister then
begin
btnRegisterClick(Self);
Exit;
end;
inherited;
end;
end.
这个方法的本质就是截获 TForm1 的 WM_COMMAND 消息并自己处理,请自行分析代码,我就不多说了。编译完后你可以用 DEDE 反汇编一下,看看还能不能那么容易地找到 TForm1.btnRegisterClick 的入口地址。
结束语
VCL 消息机制你理解了吗?是不是感到特别复杂?一个消息往往要经过10几个方法才能传到 Event Handler,别看消息传递经过这么漫长的路途,但是 VCL 消息机制的效率还是非常高的,因为很多关键的代码都是用汇编直接写成的,每一个中途站花费的时间也非常少,因此需要处理的消息还是能很快地到达目的地。
我最开始学 Windows 编程是从 SDK 开始学起的,那时候会写了基本的 Windows 程序,一段时间内总认为会 SDK 比会用 Delphi 牛X,现在想起来真傻,比起直来直去的 SDK 编程,VCL 消息机制要复杂得多得多,看完 VCL 源码后最大感受就是觉得以前跟没学过编程似的,但不可否认的是,只有在你掌握了 OOP/ASM/SDK 这些基础知识后,你才有看懂 VCL 源码的资本,这些基础知识你都掌握了吗?
参考文献
1. 李维.《深入核心 -- VCL架构剖析》第四、五章,2004.1
2. savetime."Delphi 的消息机制浅探", Jan 2004
3. cheka."VCL窗口函数注册机制研究手记,兼与MFC比较", 2001
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



