【问题标题】:how to get CREATESTRUCT of a window?如何获取窗口的 CREATESTRUCT?
【发布时间】:2013-06-26 23:54:57
【问题描述】:

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

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

【问题讨论】:

标签: c winapi window


【解决方案1】:

使用SetWindowLongPtrSetPropWM_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 也是一个有效的替代方案。

【讨论】:

    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多