cbClsExtra和cbWndExtra主要区别:
1,两者都是附加额外空间。
2,cbClsExtra是对类的(这里所说的类不是C++中的类,而是WNDCLASS结构的变量用RegisterClass注册后,在系统中记录的一组信息,是窗口的一个模板),用该类生成的所有窗口共享该附加空间。类似于C++类中的static变量。
3,cbWndExtra是对窗口的,每实例化一个窗口都有这么一个附加空间。类似于C++类中的成员变量。
对cbClsExtra和cbWndExtra的区别,比较容易理解。
但是如何访问和设置这些附加空间呢,看了不少帖子,论坛上也有很多人提问,但都只说了 区别,没说怎么用,好不容易找到个怎么用的,却是不是这两属性的用法:
http://blog.csdn.net/wangyaohui8888/article/details/6466557
http://bbs.csdn.net/topics/250039423
大家对这些附加空间的使用存在的误区:
1,使用GetClassLong(hwnd,GCL_CBCLSEXTRA)获取类附加空间存储的数据。原因:GetClassLong(hwnd,GCL_CBCLSEXTRA)获取的是类附加空间的大小,即cbClsExtra的值。
2,使用GetClassLong(hwnd,GCL_CBWNDEXTRA)获取窗口附加空间存储的数据。原因:GetClassLong(hwnd,GCL_CBWNDEXTRA)获取的是窗口附加空间的大小,即cbWndExtra的值。
正确使用方法:
1,访问类附加空间的数据GetClassLong(hwnd,index),index表示访问附加空间以0开始的索引。
2,设置类附加空间的数据SetClassLong(hwnd,index,value),index表示访问附加空间以0开始的索引,value表示要设置的值。
3,访问窗口附加空间的数据GetWindowLong(hwnd,index),index表示访问附加空间以0开始的索引。
4,设置窗口附加空间的数据SetWindowLong(hwnd,index,value),index表示访问附加空间以0开始的索引,value表示要设置的值。
需要注意的是:index 最大值要比附加空间的大小4,因为sizeof(long)=4
---------------------
作者:lzydr
来源:CSDN
原文:https://blog.csdn.net/cdsnwhy/article/details/47305353