模态对话框上的子控件:例如button控件是什么函数创建的?好像不是CreateWindowEx啊有大神逆过dialogBoxParam么

模态对话框上的子控件:比如button控件是什么函数创建的?好像不是CreateWindowEx啊,有大神逆过dialogBoxParam么?
一直以为模态对话框和窗口的创建原理基本是一样的,先创建父窗口再创建子窗口。这两天就逆这个DialogBoxParam,基本没结果(OD逆的)。在CreateWindowEx上下断点,到第一个CreateWindowEx时,打开“查看->窗口”,里面已经有父窗口的类,类过程函数,窗口句柄。子控件也已经创建了,类名button,窗口过程也 有了。但这个时候窗口根本没显示出来。明显窗口已经创建了,只是没有显示。绝对不是调用的CreateWIndowEx。那么是哪个函数创建的对话框,又是哪些函数创建的子控件呢?着实迷惑,有没有人讨论一下?
------解决思路----------------------
创建子控件的代码是Windows在CreateDialog/DialogBox里面自己实现的
------解决思路----------------------
引用:
Quote: 引用:

创建子控件的代码是Windows在CreateDialog/DialogBox里面自己实现的


你说的这两个是两个宏,前者是非模态对话框函数CreateDialogParam,后者是模态对话框DialogBoxParam。。现在我是想知道这些函数的内部过程。。如何创建子控件的。

你净纠结这些没用的细节,人家当然知道这个是宏了。人家的意思只不过是想说 CreateDialogParam 或 DialogBoxParam 最终还是由系统实现的依次创建控件。当函数返回时肯定所有控件都创建完毕了,但通常都是 ShowWindows 之后才显示。这两个函数分别又调用了 CreateDialogParamIndirect 或 DialogBoxParamIndirect,然后 Windows 内部通过 InternalCreateDialog 或 InternalDialogBox 函数来实现,它实际上还是依次创建每个控件。至于这个是如何创建的,你要去研究 CreateDialogParamIndirect 或 DialogBoxParamIndirect 的参数,了解如何解析变长数据结构 DLGTEMPLATE/DLGTEMPLATEEX、DLGITEMTEMPLATE/DLGITEMTEMPLATEEX 结构体。