前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框。本节讲解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. Android 网络通信框架Volley简介

    1.1. Volley引入的背景在以前,我们可能面临如下很多麻烦的问题. 比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdapter#getView()里开始图像的读取. 通过Async ...

  2. git http\https\git免密设置记住用户名和密码的方法

    设置记住密码(默认15分钟): git config --global credential.helper cache如果想自己设置时间,可以这样做: git config credential.he ...

  3. sdk 更新的时连接不上dl-ssl.google.com解决办法

    今天有朋友说sdk的更新不了,借了个VPN给他也没解决问题,后来还是他自己解决了,下面分享下经验 这里介绍一种不需要FQ的解决办法,修改C:\Windows\System32\drivers\etc下 ...

  4. T-sql创建表,插入数据

    SET NOCOUNT ON; USE hibernateSqlServer GO IF OBJECT_ID('Orders') IS NOT NULL DROP TABLE Orders; GO I ...

  5. 关于TCP/IP的三次握手和四次挥手解释

    TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  6. Range对象理解,浏览器兼容性,获取鼠标光标位置

    一.关于浏览器的兼容性 目前主要有3种关于range的类似的对象,分别是W3C range 对象,Mozzlia selection ,ie TextRange 关于这三种的区别,请查看文档 http ...

  7. erlang httpc

    1,set proxy 10.100.1.76 :8888 httpc:set_options([{proxy,{{"10.100.1.76",8888},[]}}]). 2,se ...

  8. Linux:SSH错误"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! "

    hadoop@master:~$ scp /home/hadoop/.ssh/authorized_keys node3:/home/hadoop/.ssh/ @@@@@@@@@@@@@@@@@@@@ ...

  9. Velocity(8)——引入指令和#Stop指令

    #Include和#Parse都是用于将本地文件引入当前文件的指令,而且被引入的文件必须位于TEMPLATE_ROOT.这两者之间有一些区别. #Include 被#Include引入的文件,其内容不 ...

  10. 学习OpenCV——Surf(特征点篇)&flann

    Surf(Speed Up Robust Feature) Surf算法的原理                                                             ...