MFC中模态和无模式对话框之间的区别

时间:2013-08-23 08:41:34

标签: visual-studio-2010 mfc modal-dialog modeless

通过向我介绍优秀的教程链接,您能帮助我全面了解模态和无模式对话框之间的差异吗? 例如,您能解释一下链接here的程序吗?他们是模态和无模式的吗? 高达知道我认为只使用代码设计一个对话框意味着无模式,但使用Toolbox设计一个对话框意味着模态,但是在我搜索时,我会更加困惑。你能帮我理解更多吗?

4 个答案:

答案 0 :(得分:13)

模态和无模式对话框之间的区别不仅限于MFC。

模态对话框打开时,只要模态对话框打开,您就无法与程序中的此模式对话框进行任何其他操作。大多数对话框都是模态的,例如“文件另存为”对话框是模态的。

另一方面,无模式对话框就像普通窗口一样,您可以在打开时执行任何操作。 Microsoft Word中的拼写检查器对话框就是这种对话框的一个示例。

您在问题中提到的链接与模态和无模式对话框无关。

模态对话框在MFC中是微不足道的。

无模式对话框有点复杂,但您可以通过在Google上搜索“mfc无模式对话教程”找到大量教程。

答案 1 :(得分:5)

通过在MFC中调用CDialog派生类的DoModal成员函数或使用DialogBox API函数来创建模态对话框。

通过在MFC中调用CDialog派生类的Create()(或CreateIndirect)成员函数或使用CreateDialog API函数来创建无模式对话框。

以上链接还解释了为支持模态和无模式对话框还需要做些什么,对于MFC,this MSDN link还有更多信息。

答案 2 :(得分:0)

模型DialogBox: 1.模型对话框我们可以传达单个窗口(即)所有者窗口。我们可以打开子窗口(子窗口),直到我们关闭那个窗口,那时我们在父窗口上进行通信 例如:保存,另存为 2.创建模型DialogBox以调用domodel() 3.关闭你是调用结束对话框的时间。这个DialogBox不是删除只是隐藏 4.在模型DialogBox中有一个子消息循环

无模型DialogBox: 1.当我们可以同时打开一个窗口(所有者窗口)时我们也可以通信子窗口。 例如,在记事本中找到,单词,

2.model DialogBox创建是调用Create窗口()   和ShowWindow() 3.如果你想关闭那个窗口调用销毁窗口    这里的窗户被毁了 4.按摩亨德尔父窗口

答案 3 :(得分:0)

模态对话框:

  • 打开模态对话框后,我们无法访问父窗口EX:另存为,OpenDialog Box。
  • 通过调用Cdialog构造函数和DoModel CDialog方法并在堆栈中创建的模式对话框。
  • 通过调用EndDialog()函数关闭模态对话框,它隐藏了对话框。
  • 它暂停父窗口消息循环,并启动自己的消息循环。

无模式对话框:

  • 打开无模式对话框后,我们可以访问父窗口。
  • 通过调用

    创建无模式
    CDialog::Create(......);
    CDialog::Show Window(.....)
    

    方法。并在Heap中创建。

  • 通过调用Destroy Window()来破坏窗口关闭无模式对话框。
  • 它没有自己的消息循环,它取决于父窗口消息循环。父窗口将消息转发到子窗口。