C++ SetClassLongPtr(GCL_CBCLSEXTRA)用于什么?
在的文档中,它指出设置“GCL\u 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
那么,
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
。它们是两个非常不同的东西,尽管它们都可以有额外的存储字节。这不是问题所在。