发布时间 : 星期一 文章MFC模态和非模态对话框编程更新完毕开始阅读1aa567c09ec3d5bbfd0a74a2
MFC模态和非模态对话框编程
1. CDialog是从CWnd派生的。对话框有两种类型:模态和非模态。
★模态和非模态区别:
当我们显示一个模态对话框时,应用程序会暂停,即点击其他菜单或者别的不会执行,会出现警告的那种声音。直到关闭模态对话框,应用程序才会继续执行其他任务。
2. 在创建好一个新的对话框时,系统会已定义好2个方法。
● 构造函数:调用父类的构造函数,传入自己的IDD
● DoDataExchange:完成对话框数据的交换和校验
3. 模态对话框的显示和关闭
CDialog::DoModal和CDialog::EndDialog
程序示例:
void CMyboleView::OnDiadlog()
{
// TODO: Add your command handler code here
CTestDlg dlg;
dlg.DoModal(); }
4. 非模态对话框的创建
CDialog::Create
BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
默认参数为NULL,就是父窗口是框架类。
程序示例:
void CMyboleView::OnDiadlog() {
// TODO: Add your command handler code here
CTestDlg dlg;
dlg.Create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
}
PS:注意要用ShowWindow显示对话框。
问题:程序执行后,对话框还是没显示出来。为什么?
这里的 CTestDlg dlg;我们是定义成局部变量的。但是当这个函数执行完了,就会销毁dlg的。
那为什么模态可以呢?
这就是刚才我们说的创建模态对话框时,程序会暂停在那的原因导致的。