前段时间我正在编写一个带有Win32 API的C ++程序,它会显示一个对话框,然后监听它生成的消息。有一次,我有兴趣将一段数据与对话框窗口相关联。如果我手动创建窗口并附加窗口proc,我只需使用SetWindowLongPtr
将GWLP_USERDATA
字段设置为指向要关联的数据的指针。但是,在这种情况下,我使用DialogBoxParam
创建并显示窗口,并且不清楚此函数是否将该数据与其自身的内部状态相关联。由于MSDN没有描述在这种情况下会发生什么,我最终使用了一些其他方法来解决问题。
我的问题是 - 使用SetWindowLongPtr
覆盖GWLP_USERDATA
创建的窗口中的DialogBoxParam
值是否安全?
答案 0 :(得分:2)
从技术上讲,GWLP_USERDATA用于使用(子类化的基础)窗口类。由于对话框是现成的类,因此GWLP_USERDATA供内部使用 - 这就是为什么对话框为DialogProc实现的使用提供DWLP_USER字段的原因。
但是,尽管如此,Microsoft提供的所有内部窗口类 - EDIT,BUTTON,Dialog等都没有,并且由于应用程序兼容性原因而无法使用GWLP_USERDATA,因此它们可以有效地供应用程序使用。 / p>