精华内容
下载资源
问答
  • MFC模态对话框和非模态对话框

    万次阅读 多人点赞 2011-08-31 15:54:21
    MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。 一、模态对话框(model dialog box) 在程序运行的过程中,若出现了模态对话框,那么主窗口将无法...

    MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。

     一、模态对话框(model dialog box)

            在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。

           点击模态对话框中的OK按钮,模态对话框会被销毁。

            创建一个模态对话框的代码:

    	//创建一个模态对话框
    	CTestDialog td;
    	td.DoModal(); 

            其中CTestDialog为我自己所新建和一个对话框资源相关联的对话框类。

            可以创建一个布局模态对话框类变量,不用担心它会随着所在函数返回而被销毁。因为DoModal()函数的一个功能是,当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行。

            DoModal()函数也有显示对话框的功能,所以也无需调用其他函数来显示对话框。

    二、非模态对话框(modaless dialog box)

            在程序运行的过程中,若出现了非模态对话框,主窗口还可以发送消息。

            点击非模态对话框中的OK按钮,非模态对话框没有销毁,只是隐藏了。若想点击OK按钮时,非模态对话框也销毁,那么CTestDialog类必须重载其基类CDialog的虚函数OnOK(),在此函数里调用DestroyWindow()来销毁此对话框。

            若和上面一样的方式创建一个非模态对话框:

               CTestDialog td;
    	td.Create(IDD_DIALOG1); //创建一个非模态对话框
    	td.ShowWindow(SW_SHOWNORMAL); //显示非模态对话框

            那么,在运行时,你会发现此对话框无法显示。这是因为你声明的对话框变量td是局部变量,但这个函数返回时,td也被析构了,所以无法显示此对话框。

            创建非模态对话框,必须声明一个指向CTestDialog类的指针变量,且需要显示的调用ShowWindow()才能将对话框显示出来。有两种创建方法:

    (1)采用局部变量创建一个非模态对话框

    	//采用局部变量创建一个非模态对话框
    	CTestDialog *pTD = new CTestDialog();
    	pTD->Create(IDD_DIALOG1); //创建一个非模态对话框
    	pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框

           因为指针在声明的时候是被放在堆栈中,只有整个应用程序关闭后才会被销毁,所以可以正常显示对话框。

            这种方法虽然不影响程序的运行,可是指针pTD所指向的内存却导致不可用,这样的编程很不好。

    (2)采用成员变量创建一个非模态对话框

            首先在你所要编写的类的头文件中声明一个指针变量:

    private:
    	CTestDialog *pTD;

            然后再在相应的CPP文件,在你要创建对话框的位置添加如下代码:

    	//采用成员变量创建一个非模态对话框
    	pTD = new CTestDialog(); //给指针分配内存
    	pTD->Create(IDD_DIALOG1); //创建一个非模态对话框
    	pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框

            最后在所在类的析构函数中收回pTD所指向的内存:

    	delete pTD;

     

    展开全文
  • 在MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。本文对此分别简述其创建方法。 一、模态对话框(model dialog box) 在程序运行的过程中,若出现了...
  • MFC中的模态对话框与非模态对话框模态对话框模态对话框创建模态对话框的关闭顺序非模态对话框模态对话框创建非模态对话框关闭顺序注意: 模态对话框 模态对话框创建 MyDialog mydlg; mydlg.DoModal() 当前只能运行...

    模态对话框

    模态对话框创建

    MyDialog mydlg;
    mydlg.DoModal()
    

    当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行。

    模态对话框的关闭顺序

    OnClose:按关闭符号X后,响应WM_CLOSE消息
    OnKillFocus:窗口即将失去输入焦点,响应WM_KILLFOCUS消息
    OnDestroy:窗口即将被销毁时,响应WM_DESTROY消息
    OnNcDestroy:窗口被销毁或,响应WM_NCDESTROY消息
    PostNcDestroy:由onNcDesyroy调用,是Cwnd虚函数

    非模态对话框

    模态对话框创建

    MyDialog *mydlg = new MyDialog;
    mydlg->Create(IDD_DIALOG1,this);
    mydlg->ShowWindow(SW_SHOW);
    

    非模态对话框关闭顺序

    OnClose:按关闭符号X后,响应WM_CLOSE消息
    OnDestroy:窗口即将被销毁时,响应WM_DESTROY消息
    OnNcDestroy:窗口被销毁或,响应WM_NCDESTROY消息
    PostNcDestroy:由onNcDesyroy调用,Cwnd函数
    为了销毁对话框指针,可以在对话框类中重载PostNcDestroy,添加delete this。

    void MyDialog::PostNcDestroy()
    {
        CDialogEx::PostNcDestroy();
        delete this;
    }
    

    注意:

    Onclose函数结束后实际上又调用了Oncannel,Oncannel中调用的是EndDialog(),该函数用于关闭模态对话框。其工作原理为:enddialog是用来结束domodal的循环使用的,domodal内部结束后有destroywindow的调用。但是对于非模态对话框,因其没有domodal循环,故就不会自动调用destroywindow函数,也就没有后续的ondestroy等操作,所以非模态对话框要重载oncannel函数,直接执行destroywindow。

    展开全文
  • 模态对话框 及与模态对话框的转换.pdf
  • 模态对话框弹出模态对话框 可堆叠模态 (Stackable modal) Stackable modals is a library for modal dialogs which can be infinitely stacked. The component uses bootstrap for styling the modal but DOES NOT ...

    模态对话框弹出模态对话框

    可堆叠模态 (Stackable modal)

    Stackable modals is a library for modal dialogs which can be infinitely stacked. The component uses bootstrap for styling the modal but DOES NOT include it by default - you need to import it yourself.

    可堆叠模态是可无限堆叠的模态对话框的库。 该组件使用引导程序对样式进行样式设置,但默认情况下不包含它-您需要自己导入它。

    When you open a second dialog the first one is scaled to 0.9 and position behind

    当您打开第二个对话框时,第一个对话框缩放到0.9并位于后面

    安装 (Installation)

    npm i @innologica/vue-stackable-modal --save

    or

    要么

    yarn add @innologica/vue-stackable-modal

    import to use:

    导入使用:

    import StackModal from '@innologica/vue-stackable-modal'

    翻译自: https://vuejsexamples.com/a-library-for-modal-dialogs-which-can-be-infinitely-stacked/

    模态对话框弹出模态对话框

    展开全文
  • MFC中经常会用到弹出模态或非模态对话框模态对话框与非模态对话框容易混淆
  • 模态对话框VS非模态对话框

    千次阅读 2018-09-28 16:46:53
    模态对话框VS非模态对话框 模态对话框:此对话框关闭后,它的上一级对话框才可操作 非模态对话框:两个对话框可同时操作 代码实现 例如:在MainWindow中,利用pushButton打开新的对话框 void MainWindow::on_...

    模态对话框VS非模态对话框

    模态对话框:此对话框关闭后,它的上一级对话框才可操作
    非模态对话框:两个对话框可同时操作

    代码实现

    例如:在MainWindow中,利用pushButton打开新的对话框

    void MainWindow::on_pushButton_clicked()
    {
        //非模态对话框
        QDialog *dlg = new QDialog(this);
        dlg->setWindowTitle("非模态对话框");
        dlg->setFixedSize(300,200);
        dlg->show();
    
        //模态对话框1
        QDialog dlg1(this);
        dlg1.setWindowTitle("模态对话框1");
        dlg1.setFixedSize(200,100);
        dlg1.exec();//exec()函数只有在窗口被关闭后才会返回(代码继续执行)
    
        //模态对话框2
        QDialog *dlg2 = new QDialog(this);
        dlg2->setModal(true);
        dlg2->setWindowTitle("模态对话框2");
        dlg2->setFixedSize(200,100);
        dlg2->show();
    }
    

    运行效果:

    点击pushButton按钮后,只会打开两个对话框,此时只有模态对话框1是可操作的,关闭模态对话框1后才会打开模态对话框2,主窗口和非模态对话框依旧不可操作,直到模态对话框2关闭,非模态对话框和主窗口才可进行操作

    那么如果交换两个模态对话框代码顺序会怎么样呢

    void MainWindow::on_pushButton_clicked()
    {
        //非模态对话框
        QDialog *dlg = new QDialog(this);
        dlg->setWindowTitle("非模态对话框");
        dlg->setFixedSize(300,200);
        dlg->show();
    
        //模态对话框2
        QDialog *dlg2 = new QDialog(this);
        dlg2->setModal(true);
        dlg2->setWindowTitle("模态对话框2");
        dlg2->setFixedSize(200,100);
        dlg2->show();//两个窗口同时弹出,掉用完show()函数把控制权交给调用者
    
        //模态对话框1
        QDialog dlg1(this);
        dlg1.setWindowTitle("模态对话框1");
        dlg1.setFixedSize(200,100);
        dlg1.exec();//第一个窗口关闭第二个才会弹出,exec()函数只有在窗口被关闭后才会返回
    }
    

    运行效果:

    首先点击pushButton之后,三个对话框都会打开,此时只有模态对话框1可以操作,模态对话框1关闭后,模态对话框2可操作

    综上所述:当模态对话框存在的时候,主窗口和非模态对话框不可操作;多个模态对话框存在的时候,只有最后创建出来的可操作
    PS:不可根据指针和非指针来判断是否为模态对话框哦

    展开全文
  • 目录一、模态对话框与非模态对话框1.概念1.1 模态对话框(Modal Dialog)1.2非模态对话框(Modeless Dialog)2.方法2.1 setWindowModality()2.2 setAttribute() 一、模态对话框与非模态对话框 1.概念 1.1 模态...
  • VC中模态对话框和非模态对话框的编程
  • 模态对话框和非模态对话框的区别 模态对话框会阻止与其它窗口的交互,而非模态对话框不会。即模态对话框显示的时候,不能操作其它窗口,要想操作其它窗口,必须关闭该模态对话框;非模态对话框显示的时候,可以对...
  • 基于MFC向导实现的模态对话框和非模态对话框的代码,程序是基于vs2013写的,可以完美运行,适合新手学习,大佬请忽略!
  • QT模态对话框及非模态对话框学习  http://blog.sina.com.cn/s/blog_6143523a0100rxvl.html QT模态对话框及非模态对话框 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在...
  • Windows对话框分为两类:模态对话框和非模态对话框模态对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。 非模态...
  • 1.模态对话框: CDlgExec dlg;//定义一个对话框对象 dlg.DoModal();//利用这个对象调用DoModal函数以产生一个模态对话框 2.非模态对话框: CDlgShow dlg;//弹出非模态对话框 dlg.Creat(IDC_SHOW);//创建 dlg....
  • 模态对话框和非模态对话框 Windows对话框分为两类:模态对话框和非模态对话框模态对话框 当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他...
  • MFC中有两种类型的对话框: 模态 对话框和非模态 对话框。 模态 对话框是指当其显示时,...在程序运行时,若出现了模态对话框,那么主窗口将无法发送消息,知道模态对话框退出才能发送。点击模态对话框的OK按钮,模
  • show() 非模态对话框exec() 模态对话框
  • 模态对话框

    2012-05-31 07:24:37
    模态对话框
  • 一、模态对话框 模态对话框:当时模态对话框弹出时,软件中的其他对话框都将暂时无法操作。线程是阻塞的。
  • 一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。 模态对话框(Modal Dialogue Box,又叫做模式对话框)垄断了用户的输入。当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户...
  • 详解VC++模态对话框和非模态对话框
  • Qt 中使用QDialog类实现对话框。我们的对话框通常继承自QDialog。对话框分为模态对话框和非模态对话框。所谓模态对话框,就是会阻塞同一应用程序中其它窗口的输入。 ...
  • 在首界面上添加两个按钮,分别为弹出模态对话框和非模态对话框 在资源视图中右键Dialog选择插入Dialog,分别插入模态对话框(ID:IDD_EXEC)界面和非模态对话框(ID:IDD_SHOW)界面 在模态对话框右键插入类,新建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,831
精华内容 9,932
关键字:

模态对话框