模态对话框是指当其显示时,程序会暂停执行,直至关闭这个对话框为止,才能继续执行程序中的其他任务。
非模态对话框是指当其显示时。允许转而执行程序中的其他任务,而不用关闭这个对话框。
在MFC中,对资源的操作都是通过一个与资源相关的类来完成的,那么就需要创建一个类与新建的对话框资源相关联。
模态:
int CDialogView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
}
编译程序报错,要在源文件中包含CMyDialog类的头文件
#include "MyDialog.h"
这时编译并运行程序,发现先弹出对话框,进行相应操作后,再单击OK/CANCEL按钮,才正式进入应用程序的窗口。这是因为本实例是在视类的OnCreate()函数中创建的模态对话框,因此先构造了对话框,当运行到DoModal()函数时,程序会停在执行代码处,不再向下执行,只有这个模态对话框被关闭了,程序才会继续执行。
非模态对话框:
int CDialogView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
}
void CMyDialog::OnOK()
{
}
void CMyDialog::OnCancel()
{
}
在创建非模态对话框时,首先利用new在堆上给对话框对象分配内存,使得它的生命周期和应用程序的一样。而不像创建模态对话框那样直接创建一个CMyDialog类的局部对象。利用DoModal()函数本身就有显示窗口的作用。