子类( SubClass)技术用来拦截窗口或控件之间的消息,当然是消息在
到达目的窗口之前完成的操作。这些被拦截的消息既可以保留也可
以修改它们的状态,之后就继续发送到目的地。子类技术实现了一
些正常情况下无法实现的功能,试想鼠标右键单击 TextBox,系统
默认弹出 Undo、Cut、Copy、Paste 等菜单,我们就可以利用子类技术
来改变这个系统菜单。
简单的说,子类( SubClass)技术就是创建一个新的窗口消息处理过程 ,
并将其插入到原先的默认窗口消息处理过程之前。对于有点 OO 知
识的人来说,这个名称很好理解,因为它继承了上级窗口的一些
属 性 和 方 法 并 且 加 入 了 自 己 特 有 的 内 容 。 同 样 的 , 超 类
(SuperClass)技术与之相对,它通过改变父类的特性以求改变其
派生类的共同特性,这里不是我们的讨论重点,因此略过。
子类技术的原理:要先取得原先 Window Procedure 所在的地址,将之记
录起来,接着设定所有的消息都先转到我们所写的消息处理过程
上来,我们过滤传过来的消息,寻找特定的消息进行处理,其余
的送回系统,由系统决定如何处理。等到我们不需要再处理这些特
定的消息时,便取消拦截,即中止子类过程。它一般需要三个过程:
开始拦截,消息处理,中止拦截。
三、磨刀霍霍:API 准备
通常要实现子类技术需要对 Windows 消息机制有较深入的理解,同
时对于相关 API 有较好的掌握。常用 API 如下: