为什么对话的父级 window 没有对话作为子级?
Why does a dialogue's parent window not have the dialogue as a child?
我注意到在 Windows 中的大多数(如果不是全部)应用程序中,对话没有相对于其父级的双向引用。 IE。对话的父级似乎没有引用子 window 列表中的对话。我以前就注意到了这一点,但现在它真的很烦我。这是设计使然吗?有没有一种方法可以获取 window 对话的句柄(如果是模态对话,如果是非模态对话则一个或多个),只给出 window 的句柄?
我认为您可能会混淆 parent 和 owner。有一个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 是否由特定所有者拥有。
我注意到在 Windows 中的大多数(如果不是全部)应用程序中,对话没有相对于其父级的双向引用。 IE。对话的父级似乎没有引用子 window 列表中的对话。我以前就注意到了这一点,但现在它真的很烦我。这是设计使然吗?有没有一种方法可以获取 window 对话的句柄(如果是模态对话,如果是非模态对话则一个或多个),只给出 window 的句柄?
我认为您可能会混淆 parent 和 owner。有一个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 是否由特定所有者拥有。