SetClassLong函数将指定偏移处的指定的32位(长)值替换为指定窗口所属类的额外类存储器或WNDCLASS结构。
DWORD SetClassLong(
HWND 【的hWnd】, | //窗口的句柄 |
INT 【参数nIndex】, | //值的变化索引 |
LONG 【dwNewLong】 | //新值 |
); |
参数
【的hWnd】
标识窗口,间接地标识窗口所属的类。
【参数nIndex】
指定要替换的32位值。要在额外的类内存中设置一个32位值,请指定要设置的值的正零,基于零的字节偏移量。有效值范围为零,通过额外类内存的字节数减去4;例如,如果您指定了12个或更多字节的额外类内存,则值为8将成为第三个32位整数的索引。要从WNDCLASS结构中设置任何其他值,请指定以下值之一:
值 | 行动 |
GCL_CBCLSEXTRA | 设置与类相关联的额外内存的大小(以字节为单位)。设置此值不会更改已分配的额外字节数。 |
GCL_CBWNDEXTRA | 设置与类中每个窗口相关联的额外窗口内存的大小(以字节为单位)。设置此值不会更改已分配的额外字节数。有关如何访问此内存的信息,请参阅SetWindowLong和SetWindowWord. |
GCL_HBRBACKGROUND | 替换与该类相关联的背景画笔的句柄。 |
GCL_HCURSOR | 替换与该类关联的光标的句柄。 |
GCL_HICON | 替换与该类关联的图标的句柄。 |
GCL_HMODULE | 替换注册该类的模块的句柄。 |
GCL_MENUNAME | 替换菜单名称字符串的地址。字符串标识与该类相关联的菜单资源。 |
GCL_STYLE | 替换窗口类风格位。 |
GCL_WNDPROC | 替换与该类相关联的窗口过程的地址。 |
【dwNewLong】
指定替换值。
返回值
如果函数成功,则返回值是指定的32位整数的前一个值。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
如果使用SetClassLong函数和GCL_WNDPROC索引替换窗口过程,则窗口过程必须符合WindowProc回调函数描述中指定的准则。
使用GCL_WNDPROC索引调用SetClassLong会创建一个窗口类的子类,该子类影响随后使用该类创建的所有窗口。应用程序不应该对由其他进程创建的窗口进行子类化。
通过在与RegisterClass功能一起使用的WNDCLASS结构的cbClsExtra成员中指定非零值来保留额外的类内存。
请仔细使用SetClassLong功能。例如,可以使用SetClassLong更改类的背景颜色,但是这种更改不会立即重新绘制属于该类的所有窗口。
也可以看看
GetClassLong, GetClassWord, RegisterClass, SetClassWord, SetWindowLong, SetWindowWord, WindowProc, WNDCLASS