对话框程序:模式和非模式

模式对话框:当对话框弹出后,无法操作其父窗口或者上一级窗口,直到关闭该对话框为止。

在主对话框关联类A的情况下,模式对话框创建步骤:

  1. 新插入一个对话框资源,并添加所需控件
  2. 对新对话框生成新的对话框类B
  3. 对主对话框中的控件建立消息映射函数
  4. 在该消息映射函数中创建对话框类B的对象,如
B dlg;
dlg.DoModal();

模式对话框的特点:

  1. 在关闭模式对话框前,无法操作背景窗口,除非本身就是背景窗口。
  2. 使用Dialog::DoModal函数弹出模式对话框,该函数执行过程是阻塞函数。因此,在栈内或堆内申请对话框类的对象都可以,申请栈内变量开发和运行效率较高。

非模式对话框:当对话框弹出后,不影响对它的父窗口或者上一级窗口操作。

在主对话框关联类A的情况下,非模式对话框创建步骤:

  1. 新插入一个对话框资源,并添加所需控件
  2. 对新对话框生成新的对话框类C
  3. 对主对话框中的控件建立消息映射函数
  4. 在该消息映射函数中创建对话框类C的对象指针,如
C* pDlg = new C;
pDlg->Create(IDD_TEST);
pDlg->ShowWindow(SW_SHOW);

非模式对话框的特点:

  1. 在关闭非模式对话框前,不影响对背景窗口的操作。
  2. 使用Dialog::Create函数创建非模式对话框,该函数是非阻塞函数。因此,必须在堆内申请对话框资源,不能再栈内申请临时对象,因为临时对象在离开函数体时会自动销毁。

你可能感兴趣的:(MFC)