setClassLongW 函数 (winuser.h)

将指定的 32 位 () 值替换为指定窗口所属类的额外类内存或 WNDCLASSEX 结构。

注意 此函数已被 SetClassLongPtr 函数取代。 若要编写与 32 位和 64 位版本的 Windows 兼容的代码,请使用 SetClassLongPtr
 

语法

DWORD SetClassLongW(
  [in] HWND hWnd,
  [in] int  nIndex,
  [in] LONG dwNewLong
);

参数

[in] hWnd

类型:HWND

窗口的句柄,以及窗口所属类的间接句柄。

[in] nIndex

类型: int

要替换的值。 若要在额外的类内存中设置 32 位值,请指定要设置的值的正从零开始的字节偏移量。 有效值在零到额外类内存的字节数之间,减去 4;例如,如果指定了 12 个或更多字节的额外类内存,则值 8 将是第三个 32 位整数的索引。 若要从 WNDCLASSEX 结构设置任何其他值,请指定以下值之一。

含义
GCL_CBCLSEXTRA
-20
设置与 类关联的额外内存的大小(以字节为单位)。 设置此值不会更改已分配的额外字节数。
GCL_CBWNDEXTRA
-18
设置与类中每个窗口关联的额外窗口内存的大小(以字节为单位)。 设置此值不会更改已分配的额外字节数。 有关如何访问此内存的信息,请参阅 SetWindowLong
GCL_HBRBACKGROUND
-10
替换与 类关联的背景画笔的句柄。
GCL_HCURSOR
-12
替换与 类关联的游标的句柄。
GCL_HICON
-14
替换与 类关联的图标的句柄。
GCL_HICONSM
-34
将句柄替换为与 类关联的小图标。
GCL_HMODULE
-16
替换注册类的模块的句柄。
GCL_MENUNAME
-8
替换菜单名称字符串的地址。 字符串标识与 类关联的菜单资源。
GCL_STYLE
-26
替换窗口类样式位。
GCL_WNDPROC
-24
替换与 类关联的窗口过程的地址。

[in] dwNewLong

类型: LONG

替换值。

返回值

类型:DWORD

如果函数成功,则返回值是指定 32 位整数的上一个值。 如果之前未设置该值,则返回值为零。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

如果使用 SetClassLong 函数和 GCL_WNDPROC 索引替换窗口过程,则窗口过程必须符合 WindowProc 回调函数说明中指定的准则。

使用 GCL_WNDPROC 索引调用 SetClassLong 会创建窗口类的子类,该子类会影响随后使用 类创建的所有窗口。 应用程序可以子类化系统类,但不应子类化由另一个进程创建的窗口类。

通过在与 RegisterClassEx 函数一起使用的 WNDCLASSEX 结构的 cbClsExtra 成员中指定非零值来保留额外的类内存。

请谨慎使用 SetClassLong 函数。 例如,可以使用 SetClassLong 更改类的背景色,但此更改不会立即重新绘制属于该类的所有窗口。

示例

有关示例,请参阅 显示图标

注意

winuser.h 标头将 SetClassLong 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 Windows 10版本 10.0.10 (240 中引入的 ext-ms-win-ntuser-windowclass-l1-1-2)

请参阅

概念性

GetClassLong

引用

RegisterClassEx

SetClassLongPtr

SetWindowLong

WNDCLASSEX

窗口类

WindowProc