c - 如何获取窗口的CREATESTRUCT?

标签 c winapi window

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

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

最佳答案

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

关于c - 如何获取窗口的CREATESTRUCT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17377743/

相关文章:

visual-c++ - 基于操作系统的 Win32 C++ 导入路径?

python - 从 Python 脚本查询 Windows 10/8 监视器缩放?

c++ - 如何查找是否可以通过 ShellExecute 打开文档?

c++ - 如何从 CreateWindowEx() 窗口获取宽度和高度? C++

c - 如何使用 atmega32 让多个超声波传感器同时工作

c - 多客户端服务器、多接口(interface)、多IP版本Socket

c++ - 无限循环中的 Windows 消息泵

c++ - 我如何知道 HANDLE 对象是否已初始化?

c - 在循环内动态分配结构

在 C 中比较字符串并打印存储的字符串