加法打算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益。一气呵成,鸡啄米这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。

       一.模态对话框和非模态对话框

       Windows对话框分为两类:模态对话框和非模态对话框。

       模态对话框是这样的对话框,当它弹出后,本运用程序其他窗口将不再授与用户输入,只有该对话框响运用户输入,正正在对它进行相应操作退出后,其他窗口能力继续与用户交互。

       非模态对话框则是,它弹出后,本程序其他窗口仍能响运用户输入。非模态对话框一般用来显现提示信歇等。

        大家对Windows编制很了解,相信这两种对话框应该都遇到过。之前的加法打算器对话框其实就是模态对话框。

       二.模态对话框是怎样弹出的

       原形加法打算器程序大限制都是MFC自动天生的,对话框怎样弹出来的大家可能还不是很了解。鸡啄米下面简单说说它是正正在哪里弹出来的,再浸新建一个新的对话框并弹出它,这样大家执行以后就能更灵活的运用模态对话框了。

       大家打开Addition.cpp文件,可以看到CAdditionApp类有个InitInstance()函数,正正在MFC运用程序框架分解中提到过此函数,不过那是单文档运用程序App类中的,函数体不太相同,但都是进行App类实例的初始化工作。

VS2010/MFC编程初学之十一(对话框:模态对话框及其弹出历程)

       InitInstance()函数的后半限制有一段代码就是定义对话框对象并弹出对话框的,鸡啄米下面给出这段代码并加以注释:

C++代码
  1. CAdditionDlg dlg;        // 定义对话框类CAdditionDlg的对象dlg   
  2. m_pMainWnd = &dlg;       // 将dlg设为主窗口   
  3. INT_PTR nResponse = dlg.DoModal();   // 弹出对话框dlg,并将DoModal函数的返回值(退出时点击按钮的ID)赋值给nResponse   
  4. if (nResponse == IDOK)               // 坚决返回值是否为OK按钮(其ID为IDOK,鸡啄米曾经将它删除)   
  5. {   
  6.     // TODO: Place code here to handle when the dialog is   
  7.     //  dismissed with OK   
  8. }   
  9. else if (nResponse == IDCANCEL)      // 坚决返回值是否为Cancel按钮(其ID为IDCANCEL,鸡啄米将它的Caption改为了“退出”)   
  10. {   
  11.     // TODO: Place code here to handle when the dialog is   
  12.     //  dismissed with Cancel   
  13. }  

       弹出对话框比拟关键的一个函数,就是对话框类的DoModal()函数。CDialog::DoModal()函数的原型为:

        virtual INT_PTR DoModal();   

        返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于封合对话框)的nResult参数值。如果函数不行创建对话框,则返回-1;如果显现其它错误,则返回IDABORT。

       调用了它对话框就会弹出,返回值是退出对话框时所点的按钮的ID,比如,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站点了“退出”按钮,那么DoModal返回值为IDCANCEL。

       三.添加一个新对话框并弹出它

        鸡啄米再为加法打算器程序添加一个对话框,以正正在打算之前讯问用户是否确定要进行打算。大家可以一切的看下对话框的添加和弹出历程。

       1.依据“创建对话框模板和修改对话框属性”中所讲的方法,正正在Resource View中的“Dialog”上点右键选择“Insert Dialog”,创建一个新的对话框模板,修改其ID为IDD_TIP_DIALOG,Caption改为“提示”,然后参考“为对话框添加控件 ”中所讲,正正在对话框模板上添加一个静态文本框(static text),Caption改为“您确定要进行加法打算吗?”,接下来修改OK按钮的Caption为“确定”,Cancel按钮的Caption为“消释”,着末调整各个控件的位置和对话框的大小。最终的对话框模板如下图:

VS2010/MFC编程初学之十一(对话框:模态对话框及其弹出历程)

       2.依据“创建对话框类和添加控件变量”中创建对话框类的方法,正正在对话框模板上点右键选择“Add Class...”,弹出添加类的对话框,设置“Class name”为CTipDlg,点“OK”。正正在Solution Explorer中可以看到天生了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp。

       3.银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站要正正在点“打算”按钮之后弹出此提示对话框,那么就要正正在“打算”按钮的消歇治理函数OnBnClickedAddButton()中拜访提示对话框类,以是为了拜访CTipDlg类,正正在AdditionDlg.cpp中包含CTipDlg的头文件:#include "TipDlg.h"。

        4.修改OnBnClickedAddButton()的函数体,正正在所有代码前,构制CTipDlg类的对象tipDlg,并通过语句tipDlg.DoModal();弹出对话框,着末坚决DoModal()函数的返回值是IDOK还是IDCANCEL来确定是否继续进行打算。OnBnClickedAddButton()函数修改后如下:

C++代码
  1. void CAdditionDlg::OnBnClickedAddButton()   
  2. {   
  3.     // TODO: Add your control notification handler code here   
  4.     INT_PTR nRes;             // 用于保存DoModal函数的返回值   
  5.   
  6.     CTipDlg tipDlg;           // 构制对话框类CTipDlg的实例   
  7.     nRes = tipDlg.DoModal();  // 弹出对话框   
  8.     if (IDCANCEL == nRes)     // 坚决对话框退出后返回值是否为IDCANCEL,如果是则return,不然继续向下执行   
  9.         return;   
  10.   
  11.     // 将各控件中的数据保存到相应的变量   
  12.     UpdateData(TRUE);   
  13.   
  14.     // 将被加数和加数的加和赋值给m_editSum   
  15.     m_editSum = m_editSummand + m_editAddend;   
  16.   
  17.     // 依据各变量的值更新相应的控件。和的编辑框会显现m_editSum的值   
  18.     UpdateData(FALSE);   
  19. }  

       5.测试。编译运行程序后,正正在对话框上输入被加数和加数,点“打算”,弹出提示对话框讯问是否进行打算,如果选择“确定”,则提示对话框退出,并正正在主对话框上显现被加数和加数的和,而如果选择“消释”,则提示对话框也会退出,但主对话框显现的和不变,即没有进行加法打算。

       到此,大家对于模态对话框的根蒂运用方法应该控制了吧。希望大家继续体贴鸡啄米的MFC教程,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站配合提高。

除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.sygjbus.cn/software/160.html
2012年4月13日
作家:鸡啄米 分类:软件开发 浏览: 评论:57