对话框主要有两类:模式和无模式。
区别:在清除对话框之前,模式对话框使它所属的窗口(它的所有者)一直处于无效状态;无模式对话框则在其显示时,它的所有者也能被激活。
显示模式对话框需要调用CDialog::DoModal,而无模式调用CDialog::Create。DoModal要等到对话框被清除后才返回。无模式则一旦建立对话框,Create就返回,因此Create返回时对话框还处于显示状态
清除无模式对话框要调用DestroyWindow,模式调用EndDialog,禁止对无模式对话框调用CDialog::OnOk或CDialog::OnCancel,因为两者都调用EndDialog
模式对话框类通常在栈上实例化,所以析构函数是自动实现的,而无模式对话框通过new实例化,所以该对话框对象不会过早被清除。如果要确保清除对话框时删除无模式对话框对象,一种方法是在派生的对话框类中覆盖CDialog::PostNoDestroy 并执行delete this 语句。
等等
现只针对模式对话框的调用:
1、创建一个对话框模板,描述对话框和其中的控件,即 如果是基于对话框的工程,就插入一个对话框。
2、构造一个CDialog对象,并封装该对话框模板,即 在新插入的对话框上添加新Class。
3.调用CDialog::DoModal显示对话框。
4、关闭对话框,只需在新建窗口调用 OnOK() or OnCancel() 即可。
例子:
void CMainDlg::EXXX() //主窗口语句
{
NewDlg m_newDlg; //newDlg 为新建窗口类
m_newDlg.DoMoDal;
}