windows是一个基于消息的系统,消息在windows的对象之间进行着传递.子类化与windows的钩子机制存在于消息系统之中,我们可以利用这些机制来操纵.修改甚至丢弃那些在操作系统或是进程中传递的消息,以求改变系统的一些行为.子类化技术用来截取窗口或控件之间的消息,当然是消息在到达目的窗口之前完成的操作.这些被截获的消息既可以保留也可以修改它们的状态,之后就继续发送到目的地.子类化技术实现了一些正常情况下无法实现的功能,试想鼠标右键单击textbox,系统默认弹出undo.cut.copy.paste等菜单,我们就可以利用子类化技术来改变这个系统菜单.
简单的说,子类化就是创建一个新的窗口消息处理过程,并将其插入到原先的默认窗口消息处理过程之前.子类化分为三类:实例子类化(instance subclassing)—从窗口或控件的单一实例截获消息,这种子类化技术最普遍;全局子类化(global subclassing)—能够截获从相同的窗口类创建出来的多个窗口或控件的消息;超类化(superclassing)—与全局子类化很类似,区别在于可以应用在新的窗口类上面. 首先,我们看看这个c++程序:#include <iostream>using namespace std;class parent{public: void func { cout << "parent" << endl; }};class child : public parent{public: void func { cout << "child" << endl; }};void main(){ parent p; child c; p.func(); c.func();} 现在我来解说一下.这段代码中我定义了两个c++类:父类与子类,并且子类是继承自父类的;它们有一个具有相同名称的成员函数func.在main函数中,我分别构造了父类与子类的对象,并调用了它们各自的成员函数func.结果如下:parentchild 简单说来,这段代码就是子类根据自己的需要改写了func成员函数.而win32的子类化的原理也与此类似,只不过子类化实际上并没有像c++一样重载哪个函数,而是靠拦截windows系统中的某些消息来自己进行处理罢了.... 下一页