MFC模态与非模态对话框

1.简述

  1.1模态对话框(model dialog box)

    当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。

  1.2非模态对话框(modeless dialog box)

    当非模态对话框显示时,运行转而执行程序中的其他任务,而不用关闭这个对话框。

2.代码

  2.1模态对话框的实现

    

void CModelCtrDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    TestDialog1 dlg;
    dlg.DoModal();
}

    TestDialog1是我创建的一个对话框相关的对话框类。

    CDialog::DoModel:该函数的功能就是创建并显示一个模态对话框。

  2.2非模态对话框实现

void CModelCtrDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    TestDialog2 *dlg = new TestDialog2;
    dlg->Create(IDD_DIALOG2);//创建一个非模态对话框    IDD_DIALOG2是我创建的一对话框ID
    dlg->ShowWindow(SW_SHOWNORMAL);//显示非模态对话框
}

    上面程序因为dlg指针变量是在堆上存储的, 且只有程序结束才能释放, 如果要手动释放的话要增加额外的代码,因此这种写法不太合适。

    2.2.1改进代码

    首先在主对话框创建一个TestDialog2类型成员指针变量:

private:
    TestDialog2 *dlg;

     再在相应的function加上以下代码: 

    dlg = new TestDialog2;
    dlg->Create(IDD_DIALOG2);//创建一个非模态对话框    IDD_DIALOG2是我创建的一对话框ID
    dlg->ShowWindow(SW_SHOWNORMAL);//显示非模态对话框

    最后在主对话框类析构函数中加入

delete dlg;
时间: 2024-10-08 15:45:09

MFC模态与非模态对话框的相关文章

模态与非模态对话框的问题

模式对话框(modal dialog box模态对话框):在关闭模式对话框之前,程序不能进行其他工作(如一般的"打开文件"对话框) 无模式对话框(modeless dialog box 非模态对话框):模式对话框打开后,程序仍然能够进行其他工作(如一般的"查找与替换"对话框) 模态和非模态对话框的具体介绍和区别 下面是我发现的一个问题: 我新建一个MFC工程在Dialog对话框(主窗口程序)上添加两个按钮,一个打开模态对话框,另一个打开非模态对话框. 1.如果我先打

vc创建模态和非模态对话框

模态对话框的创建 创建模态对话框需要调用CDialog类的成员函数:DoModal,该函数的功能就是创建并显示一个模 态对话框,关闭模态对话框的函数是EndDialog,该函数需要一个参数,这个参数就是DoModal 函数的返回值. CTestDlg dlg;    dlg.DoModal();   //打开模态对话框 dlg.EndDialog(IDOK);//关闭模态对话框,相当于在模态对话框上点击了“确定”按钮 创建非模态对话框创建非模态对话框需要利用CDialog类的Create成员函数

MFC 模态、非模态窗口引发的系列事件及函数

标题一:创建模态窗口 CAdditionDlg dlg; // 定义对话框类CAdditionDlg的对象dlg INT_PTR nResponse = dlg.DoModal();//获取子窗口的结束方式 switch(nResponse) { case IDOK: case IDCANCEL: case IDDESTROY: } 标题二:创建非模态子窗口(完美解决非模态窗口单例问题) 步骤一:创建子窗口指针类型的公有成员 public: CMyTip* m_mytip; 步骤二:父类通过按钮

模态和非模态的区别

模态和非模态的区别 模态窗口就是在该窗口关闭之前,其父窗口不可能成为活动窗口的那种窗口.举个例子:          窗口A弹出窗口B,如果窗口B是模态的,在窗口B关闭前就不可能切换到窗口A;如果B是非模态的,那可以在这两个窗口之间任意切换. 它一般用来显示提示信息和接受用户的输入.对话框不能独立存在.目前有两种对话框,分别为:模态对话框 和 非模态对话框.模态对话框在显示之后,就不能对同一个程序中的其它窗口进行操作.非模态对话框在显示之后,还可以对同一个程序的其它窗口进行操作.

模态与非模态

QDialog的显示有两个函数show()和exec().他们的区别在参考文档上的解释如下: 1.show():显示一个非模式对话框.控制权即刻返回给调用函数.弹出窗口是否模式对话框,取决于modal属性的值.(原文:Shows the dialog as a modeless dialog. Control returns immediately to the calling code. The dialog will be modal or modeless according to the

Qt - QDialog,QWidget实现模态及非模态(模态Widget不能有父窗口,如果设置无边框就不能阻塞父窗口,但是可以强行设置指定Qt::Dialog,还可以setAttribute(Qt::WA_ShowModal),很多讲究)good

在Qt中QDialog为“窗口”,而QWidget为“部件”,首先还是了解下<Qt 窗口与部件的概念>. 对于 QDialog 的模态及非模态是直接可以实现的,很多课本中都会提到,此处总结下. 模态QDialog 方式一: QDialog dlg(this);dlg.exec(); 方式二: QDialog *pDlg=new QDialog(this);pDlg->setModal(true);pDlg->show(); 非模态QDialog QDialog *pDlg=new

Qt 之 模态、非模态、半模态窗口的介绍及 实现QDialog的exec()方法

一.简述 先简单介绍一下模态与非模态对话框. 模态对话框 简单一点讲就是在弹出模态对话框时,除了该对话框整个应用程序窗口都无法接受用户响应,处于等待状态,直到模态对话框被关闭.这时一般需要点击对话框中的确定或者取消等按钮关闭该对话框,程序得到对话框的返回值(即点击了确定还是取消),并根据返回值进行相应的操作,之后将操作权返回给用户.这个时候用户可以点击或者拖动程序其他窗口. 说白了就相当于阻塞同一应用程序中其它可视窗口的输入的对话框,用户必须完成这个对话框中的交互操作并且关闭了它之后才能访问应用

Qt 模态与非模态

模态是指当子窗口弹出时,焦点始终被强行集中于子窗口,只要子窗口不退出,焦点就不会被释放.非模态正好相反. 从线程角度讲,模态子窗口的线程是阻塞的,父.子窗口各有一个线程,当创建子窗口时,父线程就被子线程阻塞掉:非模态线程不是阻塞型的,父.子线程可以并行运行. 在Qt的模态中,主要用到QDialog的exec()方法: 1 2 3 4 5 6 7 8 9 10 SonDialog dlg(this); int res = dlg.exec(); if (res == QDialog::Accept

“模态”与“非模态”

模态与非模态,主要就是体现在是否“阻塞”应用程序上. 模态:在该窗口弹出后,会阻塞应用程序的窗口,使其不可操作: 非模态:不会阻塞应用程序的窗口,两者可独立操作. 模,就是模子,模子是不可更改的,因此模态情况下,除了它本身之外的内容不可操作. 两个的使用根据实际情况而定,转换的方式是通过 setModal() 函数. 值得注意的是,对于通过exec()函数show出来的应用程序,默认都是模态的,应该也无法更改,当然,一般情况下也不需要更改. 总结:模态与非模态的区别就是——是否阻塞应用程序. 原