窗口过程超类

【勇芳软件工作室】汉化HomePreviousNext

【超类】是一种允许应用程序创建具有现有类的基本功能的新窗口类以及应用程序提供的增强功能的技术。一个超类是基于一个名为【基础类】的现有窗口类。通常,基类是系统全局窗口类,如编辑控件,但它可以是任何窗口类。

超类有自己的窗口过程,称为超类过程。收到消息后,【超类程序】可以采取三个操作:它可以将消息传递给原始窗口过程,修改消息并将其传递给原始窗口过程,或处理消息,而不将其传递给原始窗口过程。如果超类过程处理消息,则可以在将消息传递到原始窗口过程之前,之后或之前进行处理。

与子类过程不同,超类过程可以处理窗口创建消息(WM_NCCREATEWM_CREATE等等),但它也必须将它们传递给原始的基类窗口过程,以便基类窗口过程可以执行其初始化过程。

为了超类窗口类,应用程序首先调用GetClassInfo函数来检索有关基类的信息。GetClassInfo使用基类WNDCLASS结构中的值填充WNDCLASS结构。接下来,应用程序将自己的实例句柄复制到WNDCLASS结构的的hInstance成员中,并将超类的名称复制到lpszClassName成员中。如果基类有菜单,则应用程序必须提供具有相同菜单标识符的新菜单,并将菜单名称复制到lpszMenuName成员中。如果超类过程处理WM_COMMAND消息,并且不将其传递给基类的窗口过程,则菜单不需要具有对应的标识符。GetClassInfo不返回lpszClassName 的hInstance 的hInstance 的hInstance结构的成员。

应用程序还必须设置WNDCLASS结构的lpfnWndProc成员。GetClassInfo函数使用该类的原始窗口过程的地址填充此成员。应用程序必须保存此地址,将消息传递到原始窗口过程,然后将超类过程的地址复制到lpfnWndProc成员中。如果需要,该应用程序可以修改WNDCLASS结构的任何其他成员。填写WNDCLASS结构后,应用程序通过将结构的地址传递给RegisterClass函数来注册超类。然后可以使用超类来创建窗口。

因为超类注册一个新的窗口类,应用程序可以添加额外的类字节和额外的窗口字节。超类不能为基类或窗口使用原始的额外字节,原因与实例子类或全局子类不应该使用它们相同。此外,如果应用程序为类或窗口实例添加了额外的字节,则它必须引用相对于原始基类使用的额外字节数的额外字节。由于基类使用的字节数可能会从基类的一个版本到下一个版本不同,所以超类自己的额外字节的起始偏移量也可能从基类的一个版本到下一个版本不同。