您能否通过向我介绍优秀的教程链接来帮助我全面了解模态对话框和非模态对话框之间的差异?
例如,你能解释一下这里链接的程序吗?它们是模态的还是非模态的?
据了解,我认为仅使用代码设计一个对话框意味着无模式,但使用模式设计一个对话框,Toolbox
但正如我搜索的那样,我变得更加困惑。你能帮我理解更多吗?
4 回答
模态对话框和非模态对话框之间的区别不仅限于 MFC。
当模态对话框打开时,只要模态对话框处于打开状态,您就不能与程序中的该模态对话框以外的任何东西进行交互。大多数对话框都是模态的,例如文件另存为对话框是模态的。
另一方面,无模式对话框的行为就像普通窗口一样,您可以在它打开时做任何您想做的事情。Microsoft Word 中的拼写检查对话框就是此类对话框的一个示例。
您在问题中提到的链接与模态和非模态对话框无关。
模态对话框在 MFC 中是微不足道的。
无模式对话框稍微复杂一些,但是你可以通过在 google 上搜索“mfc 无模式对话框教程”找到大量教程。
通过在 MFC 中调用 CDialog 派生类的DoModal成员函数或使用DialogBox API 函数来创建模态对话框。
通过在 MFC 中调用 CDialog 派生类的Create()(或)成员函数或使用CreateDialog API 函数来创建无模式对话框。CreateIndirect
上面的链接还解释了您还需要做什么来支持模态和非模态对话框,对于 MFC,这个 MSDN 链接有更多信息。
模态对话框:
- 打开模态对话框后,我们无法访问父窗口EX:另存为,打开对话框。
- 模态对话框通过调用
Cdialog
构造函数、DoModel
方法CDialog
和在堆栈中创建。 - 调用函数关闭模态对话框
EndDialog()
,它隐藏对话框。 - 它暂停父窗口消息循环,并开始自己的消息循环。
无模式对话框:
- 打开无模式对话框后,我们就可以访问父窗口了。
通过调用创建的无模式
CDialog::Create(......); CDialog::Show Window(.....)
方法。并在堆中创建。
- 通过调用
Destroy Window()
. - 它没有自己的消息循环,它依赖于父窗口消息循环。父窗口将消息转发到子窗口。
模型对话框: 1.模型对话框我们可以通信单个窗口(即)所有者窗口。如果我们可以打开子窗口(子窗口)直到我们关闭那个窗口,我们在父窗口上通信例如:保存,保存作为 2.创建模型 DialogBox 以调用 domodel() 3.closeing time you are call end dialog.this DialogBox is not delete just hide 4.In model DialogBox there are one child message loop
无模型对话框: 1.当我们可以同时打开一个窗口(所有者窗口)时,我们也可以与子窗口通信。例如,在记事本中查找 ,word ,
2.model DialogBox创建是调用Create window()和ShowWindow() 3.如果你想关闭那个窗口调用destroy window 这里窗口被销毁4.Here按摩Handel父窗口