任何人都可以告诉我如何区分它们吗?
我很难理解顶级子窗口与对话/非对话窗口的区别因素是什么? 顶级窗口可以是对话/非对话窗口吗? 子窗口可以是对话/非对话窗口吗?
答案 0 :(得分:4)
顶级表单由桌面拥有,而子表单属于另一种表单;这意味着关闭或最小化拥有表单也会影响子表单。
模态表单/对话框阻止调用线程,直到表单关闭,而无模式表单允许您在显示时与应用程序中的其他表单进行交互。任何形式都可以是模态/无模式的,无论它是顶层还是子形式 - 但是模态对话框的默认行为是由导致它们显示的形式所拥有。
答案 1 :(得分:2)
来自MSDN:
模态
在继续使用应用程序的其余部分之前,必须先关闭或隐藏模式窗体或对话框。
无模式
无模式表单允许您在表单和另一个表单之间移动焦点,而无需关闭初始表单。
顶级窗口可以是模态(对话框)或无模式。
顶级窗口由桌面拥有,因此它不能是父表单的子级。
由父表单拥有的子窗口不是顶级表单,因为它有父表单。但它可以位于Z顺序的顶部,并且可以是模态或无模式,具体取决于它的显示方式,分别为pop()
或ShowDiaglog()
。
答案 2 :(得分:1)
顶级窗口:不属于任何其他窗口的窗口,因此它们管理自己的生命周期。示例记事本窗口
子窗口:由其他窗口拥有的窗口。这个其他窗口本身可以是顶级或子级。示例编辑框或记事本的状态栏,因此如果您关闭记事本窗口编辑框,状态栏等窗口将消失。
模态窗口:阻止当前线程执行直到它处于活动状态的窗口。如果它是子窗口,则将阻止与其父窗口的任何交互。记事本的“示例字体”对话框,如果打开“字体”窗口,则无法在记事本窗口中键入任何内容。
无模式窗口:当活动线程处于活动状态时不会阻止当前线程执行的窗口,因此如果它是子窗口,它允许您与其父窗口进行交互。示例“记事本”的“查找”对话框,如果按Ctrl + F并打开“查找”窗口,则可以将其放在一边并继续在主记事本窗口中键入。
重要的是,窗口可以是Child或Top级别,但不能同时为。
希望这有帮助。