为什么对话的父级 window 没有对话作为子级?

Why does a dialogue's parent window not have the dialogue as a child?

我注意到在 Windows 中的大多数(如果不是全部)应用程序中,对话没有相对于其父级的双向引用。 IE。对话的父级似乎没有引用子 window 列表中的对话。我以前就注意到了这一点,但现在它真的很烦我。这是设计使然吗?有没有一种方法可以获取 window 对话的句柄(如果是模态对话,如果是非模态对话则一个或多个),只给出 window 的句柄?

我认为您可能会混淆 parentowner。有一个child window and an owned window的区别。两者都是使用 SetParent()CreateWindow/Ex()hwndParent 参数建立的,但区别在于 owned window 是一个 top -level overlapped/popup window 没有 WS_CHILD 样式标志(系统拥有的一些顶级 windows 除外)。可以使用 EnumChildWindows() 枚举子 windows,而没有单个 API 可以枚举拥有的 windows。您必须使用 EnumWindows() 枚举顶级 windows,使用 GetParent()/GetWindow(GW_OWNER) 检查每个 window 是否由特定所有者拥有。