何谓子类化(subclassing)众所周知,Windows是一个基于消息的系统,消息在Windows的对象之间进行着传递
子类化和Windows的钩子机制存在于消息系统之中,我们可以利用这些机制来操纵、修改甚至丢弃那些在操作系统或是进程中传递的消息,以求改变系统的一些行为
子类化技术用来截取窗口或控件之间的消息,当然是消息在到达目的窗口之前完成的操作
这些被截获的消息既可以保留也可以修改它们的状态,之后就继续发送到目的地
子类化技术实现了一些正常情况下无法实现的功能,试想鼠标右键单击TextBox,系统默认弹出Undo、Cut、Copy、Paste等菜单,我们就可以利用子类化技术来改变这个系统菜单
简单的说,子类化就是创建一个新的窗口消息处理过程,并将其插入到原先的默认窗口消息处理过程之前
子类化分为三类:实例子类化(instancesubclassing)—从窗口或控件的单一实例截获消息,这种子类化技术最普遍;全局子类化(globalsubclassing)—能够截获从相同的窗口类创建出来的多个窗口或控件的消息;超类化(superclassing)—和全局子类化很类似,区别在于可以应用在新的窗口类上面
VisualBasic6子类化的实现在VisualBasic6子类化的实现中我们将通过一段代码的实例来介绍这一技术在VB6中的应用
现在很多开发社区中经常谈到的一个话题就是界面开发如何Skin,这种技术有很多解决方式,如使用可以贴图的控件或使用第三方开发的换肤ActiveX控件
其实Skin技术需要处理的是WM_DRAWITEM、WM_MEASUREITEM、WM_NCPAINT消息,这些消息的主要用途就是可以重画控件和窗口的非客户区
想要对这些VB6无法处理的消息进行编程就必须用到子类化,这些消息都会被发送到能够自绘的控件的窗口上,因此下面的例子就是利用窗口子类