最佳答案:
SetClassLong是一个函数,该函数的功能:它会替换存储空间中指定偏移量处的32位长整型值,或替换指定窗口所属类的WNDCLASSEX结构(应该是替换这个结构体中的值,并没有把结构体给换了)。
详情介绍
SetClassLong是一个函数,该函数的功能:它会替换存储空间中指定偏移量处的32位长整型值,或替换指定窗口所属类的WNDCLASSEX结构(应该是替换这个结构体中的值,并没有把结构体给换了)。
- 中文名
- SetClassLong
- 外文名
- SetClassLong
- Windows NT
- 3.1以上版本
- Windows
- 95以上版本
- Windows CE
- 1.0以上版本
SetClassLong简介
函数功能:该函数替换额外的类存储空间中指定偏移量处的32位长整型值,或替换指定窗口所属类的WNDCLASSEX结构(应该是替换这个结构体中值,没有替换结构体)。
函数原型:DWORD SetClassLong(HWND hWnd,int nlndex,LONG dwNewLong)
例如,下面的代码可以创建新的画刷,把句柄存入到窗口类中然后删除旧的画刷:
DeleteObject ((HBRUSH)
SetClassLong (IntPtr hWnd,int nlndex,long dwNewLong)
GetStockObject (WHITE_BRUSH))) ; //参考Windows程序设计第五版P361
SetClassLong参数
hWnd:窗口句柄及间接给出的窗口所属的类。
nlndex:指定将被替换的32位值。在额外类存储空间中设置32位值,应指定一个大于或等于0的偏移量。
有效值的范围从0到额外类的存储空间的字节数一4;
例如,若指定了12个字节或多于12个字节的额外类存储空间,则索引值为8时,对应的是第三个32位整数值。
如果要设置WNDCLASSEX结构中的任何值,需要指定下面索引之一:
GCL_CBCLSEXTRA:设置与类相关的尺寸的字节大小。设定该值不改变己分配的额外字节数。
GCL_CBWNDEXTRA:设置与类中的每一个窗口相关的尺寸的字节大小。设定该值不改变已分配额外字节数。查看如何进入该内存,参看SetWindowLOng。
GCL_HBRBACKGROUND:替换与类有关的背景刷子的句柄。
GCL_HCURSOR:替换与类有关的光标的句柄。GCL_HICON:替换与类有关的图标的句柄。
GCL_HMODULE:替换注册类的模块的句柄。GCL_STYLE:替换窗口类的风格位。
GCL_MENUNAME :替换菜单名字符串的地址。该字符串标识与类有关的菜单资源。
GCL_WNDPROC :替换与窗口类有关的窗口过程的地址。
dwNewLong:指定的替换值。
返回值:
返回值的类型:DWORD
如果函数成功,返回值是原来类结构中32位整数;如果没有初始化,返回值为0。如果函数失败,返回值也为0。若想获得更多错误信息,请调用GetLastError函数。
备注;如果使用SetClassLong函数和GCL_WNDPROC索引值来替换窗口程序,新的窗口程序必须与WindowProc回调函数中所规定的规则一致。
以带有GCL_WNDPROC索引值的SetClassLong函数修改的一个窗口类的的子类将会影响所有随后以该类创建的窗口。应用程序可以创建一个系统类的子类,但是不能创建由其他进程创建的类的子类。
通过使用RegisterClassEx函数将WNDCLASSEX结构中的cbWndExtra单元指定为一个非零值来保留额外的的类存储空间。
使用SetClassLong函数要小心。例如,可以通过使用SetClassLong来改变类的背景颜色,但是这种改变不会马上生效,直到属于该类的窗体下次重绘,除非使用UpdateWindow()强迫窗体更新。
Windows CE:nlndex参数是一个字节偏移量但必须是4的倍数。Unaligned不支持。
不支持在nlndex参数中的标准的CGL_★值,只有一个例外,如果目标设各支持鼠标,则可以在nlndex参数中指定CGL_HCURSOR。
注意支持鼠标的WindowsCE版本包含Iconcurs和Mcursor组件而不是lcon和Cursor组件。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT 上实现为Unicode和ANSI两种版本。
免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报
举报