Winapi 访问比长指针更多的窗口额外字节
我正在试图弄清楚如何正确使用额外的字节,您可以让windows为您的windows和windows类分配这些字节 如果我正确阅读了文档,您可以告诉windows为您的窗口或窗口类分配指定数量的内存。 但我只能找到两种方法来访问和修改上述数据,SetWindowLongPtr和GetWindowLongPtr 问题是,使用这些方法,您只能设置一个充满数据的LongPtr,所以64/32位取决于您的系统Winapi 访问比长指针更多的窗口额外字节,winapi,Winapi,我正在试图弄清楚如何正确使用额外的字节,您可以让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用户数据中即可。是因为无法存储小于指针值大小的数据,还是需要存储的数据多于单个指针大小的值所能容纳的数据?