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