所以我正在使用带有自己的用户数据的父WM_CREATE消息处理程序部分中的CreateWindowEx()函数及其父(某个值)函数创建一个按钮,即CreateWindowEx()的最后一个参数是指向任意数据的指针
创建根/主窗口后,我们会收到一个 WM_CREATE或WM_NCCREATE消息,它允许我们通过LPARAM值使用CREATESTRUCT访问该日期,并通过SetWindowPtr(用户数据)将其分配给窗口。
但是,在创建子控件并将其附加到该父控件时,父窗口过程不会收到WM_CREATE消息和该按钮的创建数据 传递到CreateWindowEx()丢失
是否有办法知道何时在父窗口过程中在此父项中成功创建(或准备显示)子控件,以便我可以完成上述任务?
基本上,我想创建一个控件的层次结构(如在Java中带有面板和窗格的控件),父级在收到WM_CREATE(或其他一些消息,以便知道何时可以开始为其分配子级)时创建子级。这些子级在收到WM_CREATE消息后依次创建自己的子级,因此自己拥有。
答案 0 :(得分:2)
父窗口接收到一个WM_PARENTNOTIFY来创建子窗口(以及其他一些事件)。请确保不要设置WS_EX_NOPARENTNOTIFY扩展样式(默认情况下,该样式是由对话框窗口类创建的控件所设置)。
在创建窗口时作为WM_PARENTNOTIFY的一部分接收的数据包括在WM_NCCREATE / WM_CREATE期间发送到窗口的LPCREATESTRUCT(仅在成功创建窗口的情况下才会发生WM_PARENTNOTIFY)。