【发布时间】:2019-04-21 16:11:39
【问题描述】:
所以我正在创建一个带有 CreateWindowEx() 函数的按钮,它的父 WM_CREATE 消息处理程序部分中的父(某个值)带有它自己的用户数据,即 CreateWindowEx() 的最后一个参数是指向一些任意数据的指针.
当创建根/主窗口时,我们会收到一个 WM_CREATE 或 WM_NCCREATE 消息允许我们通过 LPARAM 值使用 CREATESTRUCT 访问此日期,并通过 SetWindowPtr(user data) 将其分配给窗口
但是当一个子控件被创建并附加到这个父控件时,父窗口过程不会收到 WM_CREATE 消息和这个按钮的创建数据 传入CreateWindowEx()就丢失了
有没有办法知道子控件何时在父窗口过程中的这个父级中成功创建(或准备显示),以便我可以完成上述任务?
基本上我想创建一个控件的层次结构(例如在 Java 中带有面板和窗格),当父级收到 WM_CREATE 时创建它的子级(或其他一些消息,只是为了知道我何时可以开始为它分配子级)和这些孩子在收到他们的 WM_CREATE 消息并因此拥有自己的孩子时,依次创建自己的孩子。
【问题讨论】:
-
按钮类的窗口过程由操作系统(user32.dll)提供,因此
WM_CREATE被发送到这里。您应该只在您注册的类类型的窗口上使用SetWindowPtr。但是这里没有问题,当CreateWindowEx返回时,您知道您的子控件的创建已经完成。 -
你可以接收
WM_CREATE子窗口,如果这是你想要的(使用GetClassInfo()/RegisterClass())。
标签: winapi