工作总结:VS2010/MFC编程入门之十六(对话框:消息对话框)

摘要:
lpszCaption:消息对话框的标题字符串。关闭消息对话框后,我们还可以获取它们的返回值。很明显,消息对话框可以完全实现。Jipecki使用消息对话框替换原始的模态对话框。“),_T,MB_OKCANCEL | MB_ICONQUESTION);//消息对话框返回一个值。

原文地址:http://www.jizhuomi.com/software/171.html

我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等。因为在软件开发中经常用到消息对话框,所以MFC提供了两个函数可以直接生成指定风格的消息对话框,而不需要我们在每次使用的时候都要去创建对话框资源和生成对话框类等。这两个函数就是CWnd类的成员函数MessageBox()和全局函数AfxMessageBox()。

       一.CWnd::MessageBox()函数和AfxMessageBox()函数的用法

       下面鸡啄米就分别讲解两个函数的用法。

       1.CWnd::MessageBox()函数

       CWnd::MessageBox()的函数原型如下:

       int MessageBox(            LPCTSTR lpszText,            LPCTSTR lpszCaption = NULL,            UINT nType = MB_OK        );

       参数说明:

       lpszText:需要显示的消息字符串。

       lpszCaption:消息对话框的标题字符串。默认值为NULL。取值为NULL时使用默认标题。

       nType:消息对话框的风格和属性。默认为MB_OK风格,即只有“确定”按钮。

       nType的取值可以是下面两个表中任取一个值,也可以是各取一个值的任意组合。即可以指定一个对话框类型,也可以指定一个对话框图标,还可以两者都设定。

nType 取值参数说明
MB_ABORTRETRY有“终止”、“重试”和“忽略”按钮
MB_OK有“确定”按钮
MB_OKCANCEL有“确定”和“取消”按钮
MB_RETRYCANCEL有“重试”和“取消”按钮
MB_YESNO有“是”和“否”按钮
MB_YESNOCANCEL有“是”、“否”和“取消”按钮

对话框类型表

nType 取值显示图标
MB_ICONEXCLAMTION             MB_ICONWARNINGVS2010/MFC编程入门之十六(对话框:消息对话框)
MB_ICONASTERISK             MB_ICONINFORMATIONVS2010/MFC编程入门之十六(对话框:消息对话框)
MB_ICONQUESTIONVS2010/MFC编程入门之十六(对话框:消息对话框)
MB_ICONHAND             MB_ICONSTOP             MB_ICONERRORVS2010/MFC编程入门之十六(对话框:消息对话框)

 对话框图标表

       如果想要设置nType的值为类型和图标的组合,可以像这样取值:MB_OKCANCEL | MB_ICONQUESTION。按位取或就可以了。

VS2010/MFC编程入门之十六(对话框:消息对话框)

       2.AfxMessageBox()函数

       AfxMessageBox()的函数原型为:

       int AfxMessageBox(            LPCTSTR lpszText,            UINT nType = MB_OK,            UINT nIDHelp = 0        );

       参数说明:

       lpszText:同CWnd::MessageBox()函数

       nType:CWnd::MessageBox()函数

       nIDHelp:此消息的帮助的上下文ID。默认值为0,取0时表示要使用应用程序的默认帮助上下文。

       二.CWnd::MessageBox()和AfxMessageBox()的返回值

      我们在调用了上面两个函数后,都可以弹出模态消息对话框。消息对话框关闭后,我们也都可以得到它们的返回值。两者的返回值就是用户在消息对话框上单击的按钮的ID,可以是以下值:

      IDABORT:单击“终止”按钮。       IDCANCEL:单击“取消”按钮。       IDIGNORE:单击“忽略”按钮。       IDNO:单击“否”按钮。       IDOK:单击“确定”按钮。       IDRETRY:单击“重试”按钮。       IDYES:单击“是”按钮。

      三.应用举例

     我们还是拿前面加法计算器的程序做例子。

       大家是否记得,在模态对话框及其弹出过程中我们修改了CAdditionDlg::OnBnClickedAddButton()函数,在点了“计算”按钮以后先弹出了一个模态对话框,询问用户是否确定要进行加法计算,并通过模态对话框DoModal函数的返回值判断用户选择了“确定”还是“取消”。这些功能很明显消息对话框完全能够实现,鸡啄米就使用消息对话框来替代原来的模态对话框。

       在非模态对话框的创建及显示中,鸡啄米注释了模态对话框的相关代码,加入了非模态对话框的创建和显示代码,我们在加入消息对话框之前将非模态对话框的代码也注释或删除掉,确保此函数中不再生成原来的模态对话框或非模态对话框。

       修改后的CAdditionDlg::OnBnClickedAddButton()函数如下:

C++代码
  1. void CAdditionDlg::OnBnClickedAddButton()   
  2. {   
  3.     // TODO: Add your control notification handler code here   
  4.  
  5.     INT_PTR nRes;   
  6.   
  7.     // 显示消息对话框   
  8.     nRes = MessageBox(_T("您确定要进行加法计算吗?"), _T("加法计算器"), MB_OKCANCEL | MB_ICONQUESTION);   
  9.     // 判断消息对话框返回值。如果为IDCANCEL就return,否则继续向下执行   
  10.     if (IDCANCEL == nRes)   
  11.         return;   
  12.   
  13.     // 将各控件中的数据保存到相应的变量   
  14.     UpdateData(TRUE);   
  15.   
  16.     // 将被加数和加数的加和赋值给m_editSum   
  17.     m_editSum = m_editSummand + m_editAddend;   
  18.   
  19.     // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值   
  20.     UpdateData(FALSE);   
  21.     // 设置属性对话框为向导对话框   
  22.     //sheet.SetWizardMode();   
  23. }  

        编译运行,在运行结果对话框上点“计算”按钮弹出以下消息对话框:

VS2010/MFC编程入门之十六(对话框:消息对话框)

       大家也可以将MessageBox函数换为AfxMessageBox()函数,同时参数进行相应修改,运行下看看效果。

免责声明:文章转载自《工作总结:VS2010/MFC编程入门之十六(对话框:消息对话框)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇captcha-killer burp验证码识别插件初体验java面试宝典下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MFC学习(1)——CFileDialog()用法

CFileDialog文件选择对话框的使用: 首先构造一个对象并提供相应的参数,构造函数原型如下: CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORDdwFlags = OFN_H...

深入浅出MFC学习笔记 消息

本章将会对MFC的消息映射和命令传递机制做深入探讨。 MFC规定了消息传递的路线,消息会按照这个路线传递下去,找不到归宿的话就交给DefWindowProc。 在产生窗口之前,如果我们在创建窗口时指定的窗口类为NULL时,MFC会自动注册五个默认的窗口类,每个窗口类有自己的窗口函数。不同窗口得到的消息应该交由不同的窗口函数来处理。所谓的命令传递机制是为了让...

MFC避免窗口闪烁的方法(OnEraseBkgnd) .

在图形图象处理编程过程中,双缓冲是一种基本的技术。我们知道,如果窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。因为窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图...

MFC框架——单文档/多文档/对话框/多顶级文档的区别

本文是在Windows 10 和 visual studio 2017的实验环境下完成的。 正文中的引用出自王正军编著的《Visual C++ 6.0 程序设计从入门到精通》 窗口的概念 窗口是屏幕上的一块矩形区域,是用来接受用户输入和程序输出的。注:本文的文档特指单文档和多文档中的文档,与文档-视图结构中的文档类(文档对象)不同。 单文档/多文档/对话框...

MFC/VC++ UI界面美化技术

1. 工具: 1.1设备环境类: Windows下的绘图操作说到底就是DC操作。DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需 要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows的设备无关性。 MFC的CDC类封装了...

VC项目配置详解

一.IDE基础配置1.字体 VC6中“Tools→Options→Format→Font”配置字体;VC2005中“工具→选项→环境→字体和颜色”配置字体。 编写代码一般采用等宽字体,等宽点阵(位图)字体,相对矢量字体而言具有兼容性好和显示清晰的优点。常用的编程等宽字体包括Fixedsys(VC6和notepad御用字体)、Consolas、YaHei M...