- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
问题:Delphi的消息机制浅探(积分:100,回复:30,阅读:909)
分类:ObjectPascal(版主:menxin,cAkk)
来自:savetime,时间:2004-1-100:04:00,ID:2403549
Delphi的消息机制浅探
savetime2k@ 2004.1.9
[显示:小字体|大字体]
我从去年12月上旬开始等待李维的《InsideVCL》。我当时的计划是,在这本书的指导下深入学习Delphi。到了12月底,书还没有出来,我不愿再等,开始阅读VCL源代码。在读完TObject、TPersistant和TComponent的代码之后,我发现还是不清楚Delphi对象到底是怎样被创建的。于是我查看Delphi生成的汇编代码,终于理解了对象创建的整个过程(这里要特别感谢book523的帮助)。
此后我就开始学习DelphiVCL的消息处理机制。自从我写下《Delphi的对象机制浅探》,至今正好一个星期,我也基本上把DelphiVCL的消息处理框架读完了。我的学习方法就是阅读源代码,一开始比较艰苦,后来线索逐渐清晰起来。在此把自己对DelphiVCL消息机制的理解记录下来,便于今后的复习,也给初学Delphi或没有时间阅读VCL源代码的朋友参考(毕竟没有几个程序员像我这样有时间:)。由于学习时间较短,一定会有错误,请大家指正。
我在分析VCL消息机制的过程中,基本上只考查了三个类TObject、TControl和TWinControl。虽然我没有阅读上层类(如TForm)的代码,但我认为这些都是实现的细节。我相信 VCL消息系统中最关键的东西都在这三个类中。纲举而目张,掌握基础类的消息处理方法之后再读其他类的消息处理过程就容易得多了。
要想读懂本文,最低配置为:
了解Win32消息循环和窗口过程
基本了解TObject、TControl和TWinControl实现的内容熟悉Delphi对象的重载与多态
推荐配置为:
熟悉Win32SDK编程熟悉Delphi的对象机制
熟悉Delphi内嵌汇编语言
推荐阅读:
《Delphi的原子世界》
/
《VCL窗口函数注册机制研究手记,兼与MFC比较》
/delphibbs/dispq.asp?lid=584889
《Delphi的对象机制浅探》
/delphibbs/dispq.asp?LID=2390131
本文排版格式为:
正文由窗口自动换行;所有代码以80字符为边界;中英文字符以空格符分隔。
(作者保留对本文的所有权利,未经作者同意请勿在在任何公共媒体转载。)
目 录
===============================================================================
一个GUIApplication的执行过程:消息循环的建立
TWinControl.Create、注册窗口过程和创建窗口
补充知识:TWndMethod概述
VCL的消息处理从TWinControl.MainWndProc开始
TWinControl.WndProc
TControl.WndProc
TObject.Dispatch
TWinControl.DefaultHandler
TControl.Perform和TWinControl.Broadcast
TWinControl.WMPaint
以TWinControl为例描述消息传递的路径
===============================================================================
正 文
===============================================================================
一个GUIApplication的执行过程:消息循环的建立
===============================================================================
通常一个Win32GUI应用程序是围绕着消息循环的处理而运行的。在一个标准的C语言Win32GUI
程序中,主程序段都会出现以下代码:
while(GetMessage(msg,NULL,0,0)) //GetMessage第二个参数为NULL,
//表示接收所有应用程序产生的窗口消息
{
TranslateMess
文档评论(0)