Winapi 访问比长指针更多的窗口额外字节

Winapi 访问比长指针更多的窗口额外字节,winapi,Winapi,我正在试图弄清楚如何正确使用额外的字节,您可以让windows为您的windows和windows类分配这些字节 如果我正确阅读了文档,您可以告诉windows为您的窗口或窗口类分配指定数量的内存。 但我只能找到两种方法来访问和修改上述数据,SetWindowLongPtr和GetWindowLongPtr 问题是,使用这些方法,您只能设置一个充满数据的LongPtr,所以64/32位取决于您的系统 有人能给我解释一下吗?我缺少什么方法吗?还是应该这样 来自和的文档: 因为额外的内存是从系统的本

我正在试图弄清楚如何正确使用额外的字节,您可以让windows为您的windows和windows类分配这些字节

如果我正确阅读了文档,您可以告诉windows为您的窗口或窗口类分配指定数量的内存。 但我只能找到两种方法来访问和修改上述数据,SetWindowLongPtr和GetWindowLongPtr

问题是,使用这些方法,您只能设置一个充满数据的LongPtr,所以64/32位取决于您的系统


有人能给我解释一下吗?我缺少什么方法吗?还是应该这样

来自和的文档:

因为额外的内存是从系统的本地堆分配的,所以应用程序应该节省使用额外的[class或window]内存。如果请求的额外[class或window]内存量大于40字节,则RegisterClassEx函数将失败。如果应用程序需要超过40个字节,它应该分配自己的内存,并在额外的[class或window]内存中存储指向该内存的指针

(Get | Set)WindowLong()
以指定的
nIndex
作为一个整体
LONG
访问一个值

(Get | Set)WindowLongPtr()
从整体上访问指定的
nIndex
处的值

是的,这意味着
(Get | Set)WindowLongPtr()
将访问不同的字节数,具体取决于您是以32位还是64位编译项目。因此,如果您想读取/写入较小数量的字节,则必须读取/写入整个
LONG/_PTR
,并根据需要进行一些位移位

即使您可以为
WNDCLASS/EX::cbWndExtra
字段指定任意字节计数,但实际上它需要足够大,以便在
nIndex
参数中指定的最后一个字节偏移量处至少容纳
sizeof(LONG/\u PTR)
字节数

这在/和/文件中有说明:

nIndex

类型:int

要检索的值的从零开始的偏移量有效值在0到额外窗口内存字节数减去4的范围内;例如,如果指定了12个或更多字节的额外内存,则值8将是第三个32位整数的索引。

nIndex

类型:int

要检索的值的从零开始的偏移量有效值的范围为0到额外窗口内存的字节数减去
LONG\u PTR的大小


WNDCLASS
中,您可以告诉它需要多少额外字节
SetWindowLongPtr
在指定的偏移量处设置指针大小的值。如果您需要两个指针,请将
cbExtraBytes
设置为
2*sizeof(LONG\u PTR)
,然后使用偏移量
0*sizeof(LONG\u PTR)
1*sizeof(LONG\u PTR)
来访问它们。只需分配您自己的内存(类对象)并将指向它的指针保存在
GWLP\u用户数据中即可。是因为无法存储小于指针值大小的数据,还是需要存储的数据多于单个指针大小的值所能容纳的数据?