我正在尝试制作一个 Windows GUI 应用程序。
我在窗口过程函数中声明了一些静态变量,并在WM_CREATE
中对其进行了初始化,其lParam
是指向CREATESTRUCT
的指针。然而,由于这些值是静态的,我只能创建一个窗口实例;如果我制作更多,以前实例的数据将更改为新数据。
有没有办法在 WM_CREATE
消息之后访问窗口的 CREATESTRUCT
以便我可以解决此问题?
最佳答案
使用SetWindowLongPtr
或SetProp
在WM_CREATE
中保存指向用户定义结构的指针,并使用匹配的函数检索它。
例如
case WM_CREATE:
SetWindowLongPtr(hWnd, GWLP_USERDATA, ((LPCREATESTRUCT)lParam)->lpCreateParams);
break;
case <other messages>:
MyData* pData = (MyData*)GetWindowLongPtr(hWnd, GWLP_USERDATA).
有些人会认为您不应该使用GWLP_USERDATA
,而应该在窗口类中保留存储空间;这取决于你。使用 SetProp
/GetProp
也是一个有效的替代方案。
关于c - 如何获取窗口的CREATESTRUCT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17377743/