前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框。本节讲解Windows系统中最常用最简单的一类对话框——消息对话框。

  我们在使用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_ICONWARNING

MB_ICONASTERISK

MB_ICONINFORMATION

 
MB_ICONQUESTION   

MB_ICONHAND

MB_ICONSTOP

MB_ICONERROR

 

  对话框图标表

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

  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++代码:

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

  

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

MFC编程入门之十六(对话框:消息对话框)的更多相关文章

  1. VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)

    上一节中鸡啄米讲了菜单及CMenu类的使用,这一节讲与菜单有密切联系的工具栏. 工具栏简介 工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成.当用户用鼠标单击工具栏上某个按钮时,程 ...

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

    前面几节鸡啄米讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消 ...

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

    原文地址:http://www.jizhuomi.com/software/171.html 我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等.因为在软件开发中 ...

  4. VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)

    上一节中鸡啄米讲了CFile文件操作类,本节主要来说说MFC异常处理. 在鸡啄米C++编程入门系列的最后一节鸡啄米:C++编程入门系列之五十(异常处理)中,鸡啄米讲了C++标准异常的处理机制,如果你还 ...

  5. VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)

    上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen. GDI对象 在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObje ...

  6. VS2010/MFC编程入门之三十八(状态栏的使用详解)

    上一节中鸡啄米讲了工具栏的创建.停靠与使用,本节来讲解状态栏的知识. 状态栏简介 状态栏相信大家在很多窗口中都能见到,它总是用来显示各种状态.状态栏实际上也是一个窗口,一般分为几个窗格,每个窗格分别用 ...

  7. VS2010/MFC编程入门之三十九(文档、视图和框架:概述)

    前面几节讲了菜单.工具栏和状态栏的使用,鸡啄米本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工 ...

  8. VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)

    上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...

  9. VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)

    上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件.本节开始鸡啄米将为大家讲解菜单的概念及使用. 菜单简介 菜单在界面设计中 ...

随机推荐

  1. What is the difference between parameterized queries and prepared statements?

    Both parameterized queries and prepared statements are exactly the same thing. Prepared statement se ...

  2. Java学习-001-JDK安装配置

    本节主要讲述在 Win7 64bit 系统下安装.配置 JDK8u25,敬请参阅.详细步骤如下: 一.JDK下载 您可到 官方网站 或 我的云盘 下载,对应的JDK8u25的安装程序,下载过程不再赘述 ...

  3. JMeter学习-018-JMeter 配置元件之-HTTP信息头管理器-实现 Cookie 登录

    之前写过一篇通过[HTTP Cookie管理器]实现登录态操作的文章,使用时需要配置每个键值对(如下图所示),相对来讲配置比较繁琐.其实,我们也可通过在[HTTP信息头管理器]添加 Cookie 信息 ...

  4. Fiddler-010-网络延时应用小技巧-模拟低网速环境

    在日常的网络测试中,经常需要测试网络超时或在网络传输速率不佳的情况的应用场景,而与此同时我们有时手边资源有限,实现在各种真实网络(2G\3G)环境下测试有些局限性.其实 fiddler 已经提供了类似 ...

  5. Nhiberate (三)测试

    (一)添加数据: public void AddUser(User user) { ISession session = NhibernateFactory.GetInstance().GetSess ...

  6. JQuery data API实现代码分析

    JQuery data 接口是什么? .data() Store arbitrary data associated with the matched elements or return the v ...

  7. svg学习(八)polyline

    <polyline> 标签用来创建仅包含直线的形状. <?xml version="1.0" standalone="no"?> < ...

  8. 企业信息系统——CRM

    客户关系管理系统(Customer Relationship Management)将客户看作是企业的一项重要资产,客户关怀是CRM的中心,其目的是与客户建立长期和有效的业务关系,在与客户的每个“接触 ...

  9. echo(),print(),print_r(),var_dump的区别?

    常见的输出语句 echo()可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用. print()函 ...

  10. 混合使用 ForkJoin, Akka, Future 实现一千万个不重复整数的排序

    定位  本文适合于想要了解新语言 Scala 以及异步并发编程框架 Akka, Future 的筒鞋. 读完本文后,将了解如何使用 ForkJoin 框架.如何使用 Akka 构建并发程序.如何使用 ...