Welcome

首页 / 软件开发 / C++ / 深入C++ Builder之编写自己的元件-深入分析VCL继承、消息机制(1)

深入C++ Builder之编写自己的元件-深入分析VCL继承、消息机制(1)2009-12-22Aweay这篇文章提及内容可能大家已经在很多地方看到过了,作者也是如此,只不过还看了很多VCL源代码,加上自己实际编写元件的经验,拼凑了这么一篇文章。所以所有言论都是个人观点、经验的描述,仅供参考。

你可转载,拷贝,但必须加入作者署名Aweay,如果用于商业目的,必须经过作者同意。

系统要求

如果你想一起跟着做的话,那么你应该看看这里,否则你可以直接跳过。

C++ Builder6 + updata4 (上帝造人的工具,以下简称BCB)

Windows2k or higher (必要)

作者强烈建议你使用WinNT,BCB在Win9x下有非常多的问题,而且非常不稳定,就算你不在乎这个,还有一个非常致命的问题,BCB的帮助文件在Win9x下显示不完全(因为BCB的帮助索引关键字数量超过Win9x的限制),这样非常难于参考帮助。

Delphi6 :( (必要)

什么?是不是写错了,完全没有写错,如果你要深入VCL查看源代码的话,在没有比用Delphi6更合适的了,在全部安装Delphi6后,把VCL Source的目录加入Search Path中,这样你可以在编辑器中按住Ctrl键,点击鼠标直接跳转到源代码处非常方便,比什么grep好用多了。

起步

对于VCL的消息机制,大家可以参考CKER的

http://www.csdn.net/develop/read_article.asp?id=8131

重复的内容我就不介绍了,但是对于编写元件来说上面的消息机制还是很模糊,而且很多时候并不是用那些方法来处理消息的,还有就是元件特有的CM_XXXXXXXX消息如何处理呢?如何加入自己的事件呢?这些问题我会在后面的讨论中做详细介绍。

站在巨人的肩膀

编写元件的第一件事情就是确定我们从那里继承的问题,选取一个好的祖先类是编写一个好的元件的第一步,那么到底如何选取他山之石呢?一般性的规则是这样的:

1.对于有界面的显示的,需要处理键盘事件的,又不是容器的组件从TCustomControl继承

2.对于有界面的显示的,需要不处理键盘事件的,需要处理鼠标事件的从TGraphicsControl继承

3.对于没有界面显示的,类似与TOpenDialog/TXpMenu这样的控件从TComponent继承