请问任何机构可以告诉我如何区分它们?
我很难理解顶级子窗口与对话窗口/非对话窗口有什么区别。 顶层窗口可以是对话框/非对话窗口吗? 子窗口可以是对话框/非对话窗口吗?
顶级表单属于桌面,而子表单属于另一种表单; 这意味着关闭或最小化自己的表格也会影响孩子的形式。
模态窗体/对话框阻塞调用线程,直到窗体关闭,而非模态窗体允许您在显示的应用程序中与其他窗体交互。 任何形式都可以是模式/无模式的,无论它是顶级还是子级形式 – 但是模态对话框的默认行为将归属于导致它们显示的形式。
来自MSDN :
语气
在继续使用其他应用程序之前,必须关闭或隐藏模式窗体或对话框 。
无模式
无模式的形式可以让你在形式和其他形式之间转移焦点,而不必关闭最初的形式。
顶层窗口可以是模态(对话)或无模式的。
顶级窗口归桌面所有,因此它不能是父窗体的子窗体。
父窗体拥有的子窗口不是顶级窗体,因为它具有父窗体。 但是它可以在Z顺序中位于最前面,并且可以根据其显示方式分别使用ShowDiaglog()
或Show()
来进行模式化或非模式化。
顶层窗口:不属于任何其他窗口的窗口,因此管辖自己的一生。 示例记事本窗口
子窗口:其他窗口拥有的窗口。 其他窗口本身可以是顶层或者子层。 示例编辑记事本框或状态栏,如果关闭记事本窗口编辑框,则状态栏等窗口消失。
模态窗口:阻止当前线程执行直到活动的窗口。 如果是子窗口,则与其父窗口的任何交互都将被阻止。 记事本的字体对话框示例,如果您打开字体窗口,您不能在记事本窗口上键入任何内容。
无模式窗口:在活动时不会阻止当前线程执行的窗口,所以如果是子窗口,它允许您与其父窗口进行交互。 示例查找记事本对话框,如果按下Ctrl + F并打开查找窗口,则可以放在一边,继续在主记事本窗口上打字。
重要的一点,一个窗口可以是儿童或顶级,但不能同时存在。
希望这可以帮助。