MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。
一、模态对话框(model dialog box)
在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。点击模态对话框中的OK按钮,模态对话框会被销毁。
创建一个模态对话框的代码:
//创建一个模态对话框
CTestDialog td;
td.DoModal();
其中CTestDialog
为我自己所新建和一个对话框资源相关联的对话框类。
可以创建一个布局模态对话框类变量,不用担心它会随着所在函数返回而被销毁。因为DoModal()
函数的一个功能是,当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行。
DoModal()函数也有显示对话框的功能,所以也无需调用其他函数来显示对话框。
二、非模态对话框(modaless dialog box)
在程序运行的过程中,若出现了非模态对话框,主窗口还可以发送消息。
点击非模态对话框中的OK按钮,非模态对话框没有销毁,只是隐藏了。若想点击OK按钮时,非模态对话框也销毁,那么CTestDialog
类必须重载其基类CDialog
的虚函数OnOK()
,在此函数里调用DestroyWindow()
来销毁此对话框。
要建立非模态对话框需要调用两个函数Create()
和ShowWindow()