MFC模态和非模态对话框编程 联系客服

发布时间 : 星期一 文章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的。

那为什么模态可以呢?

这就是刚才我们说的创建模态对话框时,程序会暂停在那的原因导致的。