我正在尝试制作一个 Windows GUI 应用程序。
我在窗口过程函数中声明了一些静态变量,并将WM_CREATE
其初始化lParam
为指向CREATESTRUCT
. 但是,由于这些值是静态的,我只能创建一个窗口实例;如果我做更多以前实例的数据将更改为新数据。有没有办法CREATESTRUCT
在消息之后访问窗口,WM_CREATE
以便我可以解决这个问题?
WM_CREATE
使用SetWindowLongPtr
or保存指向用户定义结构的指针SetProp
,并使用匹配函数检索它。
例如
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
也是一种有效的替代方法。