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++
简单的说,子类化就是创建一个新的窗口消息处理过程,并将其插入到原先的默认窗口消息处理过程之前。子类化分为三类:实例子类化(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++