我知道可以使用SetWindowLongPtr + GWLP_USERDATA来存储指向某些数据的指针.但是可以直接存储数据,例如"一个句柄","一个bool,一个"int"或其他更大的数据.
来自http://msdn.microsoft.com/zh-tw/library/windows/desktop/ms644898%28v=vs.85%29.aspx,它说:
设置应用程序专用的新额外信息,例如句柄或指针.
,所以我猜存储一个句柄就可以了.我也使用这种方法存储RGB值没有问题.但我不知道做这样的事情是不是一个好主意.我们可以存储其他大的数据(例如结构)吗?
ps:这个问题的动机是:当我创建一个对话框窗口时,我想存储每个控件的数据.当然我可以在窗口过程中使用静态变量并将指针(对它们)传递给SetWindowLongPtr函数.但这在理论上并不"完美",因为当对话窗口关闭时,我不再需要这些数据了.当然,在实践中,我需要使用的数据非常小,我不应该关心内存的使用.但我仍然想知道是否有更好的方法.
您只需要一个指针来存储您想要的任何内容.使用要存储的数据声明结构.在CreateWindowEx()调用之前分配它,并将指针作为最后一个参数传递.您可以在窗口过程中找到WM_CREATE消息CREATESTRUCT.lpCreateParams字段.现在调用SetWindowsLongPtr来存储该指针.
无论何时需要它,都可以使用GetWindowlongPtr来恢复指向结构的指针.您需要再次清理,使用WM_NCDESTROY消息释放指针.
请注意,这是包装winapi的C++类库中使用的标准技术.请考虑使用其中一种而不是自己旋转.