background image

子类( SubClass)技术用来拦截窗口或控件之间的消息,当然是消息在

到达目的窗口之前完成的操作。这些被拦截的消息既可以保留也可

以修改它们的状态,之后就继续发送到目的地。子类技术实现了一

些正常情况下无法实现的功能,试想鼠标右键单击 TextBox,系统

默认弹出 UndoCutCopyPaste 等菜单,我们就可以利用子类技术

来改变这个系统菜单。

简单的说,子类( SubClass)技术就是创建一个新的窗口消息处理过程 ,

并将其插入到原先的默认窗口消息处理过程之前。对于有点 OO 

识的人来说,这个名称很好理解,因为它继承了上级窗口的一些

属 性 和 方 法 并 且 加 入 了 自 己 特 有 的 内 容 。 同 样 的 , 超 类

SuperClass)技术与之相对,它通过改变父类的特性以求改变其

派生类的共同特性,这里不是我们的讨论重点,因此略过。

子类技术的原理:要先取得原先 Window Procedure 所在的地址,将之记

录起来,接着设定所有的消息都先转到我们所写的消息处理过程

上来,我们过滤传过来的消息,寻找特定的消息进行处理,其余

的送回系统,由系统决定如何处理。等到我们不需要再处理这些特

定的消息时,便取消拦截,即中止子类过程。它一般需要三个过程:

开始拦截,消息处理,中止拦截。

三、磨刀霍霍:API 准备

       通常要实现子类技术需要对 Windows 消息机制有较深入的理解,同

时对于相关 API 有较好的掌握。常用 API 如下: