VS2010/MFC编程入门之十六(对话框:消息对话框)
前面几节鸡啄米讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框。本节讲解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()函数如下:
- void CAdditionDlg::OnBnClickedAddButton()
- {
- // TODO: Add your control notification handler code here
- INT_PTR nRes;
- // 显示消息对话框
- nRes = MessageBox(_T("您确定要进行加法计算吗?"), _T("加法计算器"), MB_OKCANCEL | MB_ICONQUESTION);
- // 判断消息对话框返回值。如果为IDCANCEL就return,否则继续向下执行
- if (IDCANCEL == nRes)
- return;
- // 将各控件中的数据保存到相应的变量
- UpdateData(TRUE);
- // 将被加数和加数的加和赋值给m_editSum
- m_editSum = m_editSummand + m_editAddend;
- // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值
- UpdateData(FALSE);
- // 设置属性对话框为向导对话框
- //sheet.SetWizardMode();
- }
编译运行,在运行结果对话框上点“计算”按钮弹出以下消息对话框:

大家也可以将MessageBox函数换为AfxMessageBox()函数,同时参数进行相应修改,运行下看看效果。
消息对话框就讲到这里了。在以后的软件开发中用到它的频率很高,希望大家慢慢熟悉并掌握它。有问题欢迎回鸡啄米博客交流或加入我们的编程入门群。
转自:http://www.jizhuomi.com/software/181.html
VS2010/MFC编程入门之十六(对话框:消息对话框)的更多相关文章
- VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)
上一节中鸡啄米讲了菜单及CMenu类的使用,这一节讲与菜单有密切联系的工具栏. 工具栏简介 工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成.当用户用鼠标单击工具栏上某个按钮时,程 ...
- 工作总结:VS2010/MFC编程入门之十六(对话框:消息对话框)
原文地址:http://www.jizhuomi.com/software/171.html 我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等.因为在软件开发中 ...
- VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)
上一节中鸡啄米讲了CFile文件操作类,本节主要来说说MFC异常处理. 在鸡啄米C++编程入门系列的最后一节鸡啄米:C++编程入门系列之五十(异常处理)中,鸡啄米讲了C++标准异常的处理机制,如果你还 ...
- VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)
上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen. GDI对象 在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObje ...
- VS2010/MFC编程入门之三十八(状态栏的使用详解)
上一节中鸡啄米讲了工具栏的创建.停靠与使用,本节来讲解状态栏的知识. 状态栏简介 状态栏相信大家在很多窗口中都能见到,它总是用来显示各种状态.状态栏实际上也是一个窗口,一般分为几个窗格,每个窗格分别用 ...
- VS2010/MFC编程入门之三十九(文档、视图和框架:概述)
前面几节讲了菜单.工具栏和状态栏的使用,鸡啄米本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工 ...
- VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)
上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...
- VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件.本节开始鸡啄米将为大家讲解菜单的概念及使用. 菜单简介 菜单在界面设计中 ...
- MFC编程入门之十六(对话框:消息对话框)
前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消息对话 ...
随机推荐
- Bitmap之安卓手机壁纸的设置
MainActivity: package com.hyzhou.imagedemo; import java.io.File; import android.os.Bundle; import an ...
- 原来javascript 自带 encodeURI 和 decodeURI文 方法了
今天百度一下才知道js 自带 encodeURI 和 decodeURI 方法了,之前还找了其他代码来处理(笑哭了.jpg <script type="text/javascript& ...
- VS2015编译JPEG9b源码
输入:nmake -f makefile.vc libjpeg.lib 出现错误:找不到win32.mak文件 按照网上说的,这个win32.mak可以在C:\Program Files (x86)\ ...
- mac 安装mysql 修改密码
我草!!! 上网查资料,安装mysql,一大推废话,简直就是他妈的瞎扯淡,真是能他妈的瞎编,草! 为了不让后面的同学看到那些狗屁不通的资料,我把自己安装mysql的步骤,以及修改mysql密码的方法梳 ...
- php学习一:语法规则
1.书写规则 在html中嵌入php的时候,需要有结束语,即<?php ...?>,在靠近结束符号的最后一个语句可以不用写分号: 但是在单独的php中,最后可以不用以?>来结尾; 2 ...
- C++模板中的嵌套
在下面的程序中,我们创建了一个模板类用于实现Queue容器的部分功能,并且在模板类中潜逃使用了一个Node类.queuetp.h // queuetp.h -- queue template with ...
- poj_3261 后缀数组
题目大意 给出一个数字串,找出其中至少重复K次的最长的子串长度. 题目分析 直接用后缀数组来求解,限制height[i]的长度来对排好序的后缀进行分组(这种方法经常在字符串问题中被使用). 先 ...
- centos7 ubuntu14 添加sudo 权限 ,禁用每次sudo 需要输入密码
安装完centos7后,默认没有启用sudo,首先应该是对sudo进行设置.sudo的作用就是使当前非root用户在使用没有权限的命令 时,直接在命令前加入sudo,在输入自己当前用户的密码就可以完成 ...
- HTML标签img--改变图片尺寸
转自:https://blog.csdn.net/u012377333/article/details/50508484 1.统一大小? 我的网页上面有许多的图片,有的大,有的小,我想如果图片大的实现 ...
- Android--aapt命令
1.aapt l[ist] [-v] [-a] file.{zip,jar,apk} 释义:列出压缩文件中的内容 aapt l xxx.apk:简单的罗列压缩文件中每一项的内容 aapt l -v x ...



