模态对话框和非模态对话框的区别 假设对话框类名为:CTestDlg 1,如果是模态对话框: CTestDlg ctd;//创建该对话框对像 ctd
DoModale(); 2,如果是非模态的: CTestDlg *p_ctd= new CTestDlg();//创建对话框的对像指针 p_ctd->Create(IDD_READING,this);//指针调用Create()函数,ID号为对话框的
p_ctd->ShowWindow(SW_SHOWNA);//()中的参数可以用来改变对话框的显示模式(具体参见MSDN中ShowWindow()函数) 模态对话框创建后一定要在用户单击完对话框上的"确定"或"取消"或"关闭",也就是对它进行了响应并关闭后,程序才能继续执行
而非模态的则是创建完后程序可以继续执行,对话框可以成为后台对话框
所以也可以用函数来关闭 p_ctd->DestroyWindow(); 模态对话框就是指那种“显示出来就不可以点选位于其下面的对话框”的对话框;反之的就是非模态对话框
两者的区别: 一
非模态对话框的模板必须具有 Visible风格(Visible=True),否则对话框将不可见,而模态对话框则无需设置该项风格
在实际编程中更加保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框,而不管对话框是否具有 Visible风格
非模态对话框对象是用new操作符来动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建的
通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象
通过调用CDialog::Create函数来启动对话框,而不是CDialog::DoModal,这是两者之间区别的关键所在
由于 Create函数不会启动新的消息循环,对话框与应