2

我正在尝试制作一个 Windows GUI 应用程序。

我在窗口过程函数中声明了一些静态变量,并将WM_CREATE其初始化lParam为指向CREATESTRUCT. 但是,由于这些值是静态的,我只能创建一个窗口实例;如果我做更多以前实例的数据将更改为新数据。有没有办法CREATESTRUCT在消息之后访问窗口,WM_CREATE以便我可以解决这个问题?

4

1 回答 1

4

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也是一种有效的替代方法。

于 2013-06-29T07:20:01.140 回答