首页 > 解决方案 > 在 CreateWindowEx 中传递附加数据有什么用

问题描述

在 Windows API 文档中,它提到您可以传递额外的数据,如状态信息,以CreateWindowEx()作为其最后一个参数,可以在WM_CREATE/WM_NCCREATE事件期间访问。SetWindowLongPtr()然后,您可以使用函数将状态信息存储在窗口本身内。

但是,如果我们可以SetWindowLongPtr()在 Window 初始化之后(在 wWinmain() 内部)直接使用直接设置数据,那么这样做有什么意义呢?

标签: windowswinapistate

解决方案


通过lpParam参数传递用户数据CreateWindow/Ex()允许您的窗口过程 CreateWindow/Ex()仍在运行时访问该数据。有几条消息CreateWindow/Ex()自己发送到窗口,包括WM_(NC)CREATE. 收到WM_(NC)CREATE后,您的数据可通过CREATESTRUCT指向的访问,因此您可以通过(or )lParam将该数据分配给窗口,以便后续消息通过(or ) 访问。SetWindowLongPtr()SetProp()GetWindowLongPtr()GetProp()

如果您等到 afterCreateWindow/Ex()退出后再调用SetWindowLongPtr(),则这些初始消息将没有机会访问您的数据,除非您将其存储在窗口过程可以访问的全局或线程局部变量中。

您是否可以接受这取决于您的具体情况。


推荐阅读