C++ SetClassLongPtr(GCL_CBCLSEXTRA)用于什么?

C++ SetClassLongPtr(GCL_CBCLSEXTRA)用于什么?,c++,windows,winapi,visual-c++,setclasslong,C++,Windows,Winapi,Visual C++,Setclasslong,在的文档中,它指出设置“GCL\u CBCLSEXTRA”不会更改已分配的额外字节数 那么,SetClassLongPtr(…,GCL\u CBCLSEXTRA,…)用于什么?GCL\u CBCLSEXTRA是自Windows 2000 Pro以来GetClassLongPtr的有效标志 它检索有关用于存储额外信息的Windows类内存大小的信息。换句话说:它是在用于注册窗口类的窗口类结构之后分配的以字节为单位的内存大小。正如Cody Gray在回答OP的问题和评论时所说的那样,GCL\u CB

在的文档中,它指出设置“GCL\u CBCLSEXTRA”不会更改已分配的额外字节数


那么,
SetClassLongPtr(…,GCL\u CBCLSEXTRA,…)
用于什么?

GCL\u CBCLSEXTRA是自Windows 2000 Pro以来GetClassLongPtr的有效标志


它检索有关用于存储额外信息的Windows类内存大小的信息。换句话说:它是在用于注册窗口类的窗口类结构之后分配的以字节为单位的内存大小。

正如Cody Gray在回答OP的问题和评论时所说的那样,
GCL\u CBCLSEXTRA
只应在调用
GetClassLongPtr
函数时使用

没有任何理由,在调用
SetClassLongPtr
函数时使用
GCL\u CBCLSEXTRA
也可能是错误的

假设有一个
struct
,它的第一个字段/成员
p
将缓冲区的地址存储为
void*
类型的指针,第二个字段/成员
size
存储为
size\t
类型的整数,即
p
所指缓冲区的大小(字节)

使用
GCL\u CBCLSEXTRA
调用
SetClassLongPtr
与修改
struct
size
字段/成员一样错误,例如,不修改
struct
的字段/成员
p
,也不重新分配
realloc
函数,由
struct
的字段/成员
p
指向的缓冲区

在C语言中,访问
size
字段/成员的
struct
仅用于获取其值,除非或直到
p
字段/成员指向的缓冲区被重新分配,例如通过调用
realloc
函数,只有这样,您才能修改
结构
大小
字段/成员以进行更新


由于使用GCL\u CBCLSEXTRA调用
SetClassLongPtr
是错误的,如果将
nIndex
设置为
GCL\u CBCLSEXTRA
以防止在
SetClassLongPtr
nIndex=GCL\u CBCLSEXTRA
成功并进行修改时可能发生的应用程序崩溃,则功能
SetClassLongPtr
可能始终会失败。

,该值与
GetClassLong[Ptr]
函数一起使用,用于检索与该类关联的额外内存的大小。@CodyGray:Er。。。它是用来干什么的?你可以在里面储存你想要的任何东西。注册类时,您请求额外的空间。请参阅
WNDCLASS
结构的
cbClsExtra
成员。不过,我不认为现在真的没有人这样做了。@Mehrdad:,所以你写的问题对我来说真的很奇怪。你只是问额外的窗口字节是干什么用的吗?是的,我怀疑
SetWindowLongPtr
实际上是一个打字错误,你的意思是
SetClassLongPtr
。它们是两个非常不同的东西,尽管它们都可以有额外的存储字节。这不是问题所在。