要全局子类化一个窗口类,应用程序必须具有该类窗口的句柄。该应用程序还需要该句柄来删除子类。要获取句柄,应用程序通常会创建一个要子类化的类的隐藏窗口。获取句柄后,应用程序调用{??989796010}函数,指定句柄,GCL_WNDPROC标志和子类过程的地址。SetClassLong返回该类的原始窗口过程的地址。
原始窗口过程地址以全局子类化的方式用于实例子类化。子类过程通过调用CallWindowProc将消息传递给原始窗口过程。该应用程序通过再次调用SetClassLong从窗口类中删除子类,指定原始窗口过程的地址,GCL_WNDPROC标志以及被子类的窗口的句柄。全局子类化控件类的应用程序必须在应用程序终止时删除子类;否则可能会发生不可恢复的系统错误。
全局子类具有与实例子类相同的限制,另外还有一些额外的限制。应用程序不应该使用额外的字节为类或窗口实例,而不知道原始窗口过程如何使用它们。如果应用程序必须将数据与窗口相关联,则应使用窗口属性。
应用程序不能全局子系统全局类。如果多个应用程序全局子类化控件类,则可能会发生不可恢复的系统错误。如果应用程序可以从全局子类化控件类中受益,请使用称为超级类的技术。