WNDCLASS中cbClsExtra和cbWndExtra区别及其用法

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 

猜你喜欢

转载自blog.csdn.net/a359877454/article/details/88885963