(转自http://blog.csdn.net/linzhengqun/archive/2005/11/14/529300.aspx)
Windows内部预定义了一些通用的控件,我们在用这些控件的时候不必再调用RegisterClass注册一个窗口类,只要直接调用CreateWindows,并指定一个预定义的窗口类就可以,比如,我们要创建一个Button,只要用如下形式即可:
CreateWindows(.., ‘BUTTON’,...)。
但用Delphi写出来的程序,用SPY看它的某个控件的窗口类名,却是这个控件类的ClassName,比如,一个按钮控件,它的窗口类名是TButton,TButton控件也是封装系统预定义的BUTTON控件,按理它的窗口类名应该是BUTTON才对啊,怎么会变成TButton呢。这个问题长期困扰着我。
昨晚看了一下《Window 95程序设计指南》,其中讲到了Superclassing的技术,可以以系统标准控件为基础,设计新的控件。这个技术使我恍然大悟,赶紧看了一下VCL的代码,果然是用了这样的技术,大喜,以此文记之
我以一个TButton控件的创建过程,说明Superclassing技术在Delphi控件创建的应用。
TButton创建窗口是在CreateWnd方法开始,下面是创建的一个大概流程:
TButton.Cr