当前位置: 首页 > news >正文

【12】MFC入门到精通——MFC 消息对话框 MessageBox()和AfxMessageBox() 解析 示例 及 应用实例

文章目录

  • 1 成员函数MessageBox() 和全局函数AfxMessageBox()
    • 1.1 CWnd::MessageBox()函数
    • 1.2 AfxMessageBox()函数
  • 2 示例演示
  • 3 应用实例 及完整代码下载

MFC + VS2019 加法计算器+属性页对话框+消息对话框 完整工程代码

本节讲解Windows系统中最常用最简单的一类对话框–消息对话框。

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

1 成员函数MessageBox() 和全局函数AfxMessageBox()

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

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

1.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 的取值可以是下面两个表中任取一个值,也可以是各取一个值的任意组合。即可以指定一个对话框类型,也可以指定一个对话框图标,还可以两者都设定。下面表格是 对话框类型表

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

下面表格是对话框图标表

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

1.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:单击“是”按钮。

2 示例演示

当我们新建一个MFC 基于对话框的项目是这样的,

运行之后 无论是 点击 “×”、“确定” 还是 “取消” 程序都会直接退出。
在这里插入图片描述
现在希望程序窗口退出时,会有弹出提示窗口。

①将 “取消”按钮 名字改为 “退出”(不改也可以,只是个人习惯),
②双击退出按钮进入函数 , 在函数中写入MessageBox() 提示程序
在这里插入图片描述

代码如下
void CMFCApplication3Dlg::OnBnClickedCancel()
{// TODO: 在此添加控件通知处理程序代码int close = MessageBox(L"是否退出?", L"提示", MB_YESNO | MB_ICONQUESTION);if (close == IDYES){CDialogEx::OnCancel();}
}
运行结果,当点击退出时,会弹出提示框,询问是否退出?

点击是,程序窗口就退出;
点击否,关闭提示框,程序窗口不退出。

在这里插入图片描述

当第二个参数使用默认参数 NULL时,提示窗的标题默认为项目名

int close = MessageBox(L"是否退出?", L"提示", MB_YESNO | MB_ICONQUESTION);

在这里插入图片描述

AfxMessageBox() 提示程序

void CMFCApplication3Dlg::OnBnClickedCancel()
{// TODO: 在此添加控件通知处理程序代码int close = AfxMessageBox(L"是否退出?", MB_YESNO | MB_ICONQUESTION);if (close == IDYES){CDialogEx::OnCancel();}
}

在这里插入图片描述

3 应用实例 及完整代码下载

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

Addition (MFC加法计算器+属性页对话框+消息对话框) 完整工程 代码下载

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

将OnBnClickedAddButton()函数中原有的 模态/非模态对话框代码删掉,改为

void CAdditionDlg::OnClickedAddButton()
{// TODO: 在此添加控件通知处理程序代码//弹出消息对话框INT_PTR nRes;// 用于保存DoModal函数的返回值nRes = MessageBox(_T("您确定要进行加法计算吗?"),_T("加法计算器"),MB_OKCANCEL | MB_ICONQUESTION);if (IDCANCEL == nRes) return;// 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行// 将各控件中的数据保存到相应的变量//UpdateData(TRUE)将被加数的值和加数的值分别保存到变量m_editSummand和m_editAddend//TRUE 从 控件 传给 变量,FALSE 从 变量 传给 控件。UpdateData(TRUE);// 将被加数和加数的加和赋值给m_editSumm_editSum = m_editSummand + m_editAddend;// 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值//最后调用UpdateData(FALSE) 根据被加数、加数、和的值更新三个编辑框的显示值UpdateData(FALSE);}

在这里插入图片描述
在这里插入图片描述


文章转载自:
http://choirgirl.dmyyro.cn
http://allodial.dmyyro.cn
http://biostatics.dmyyro.cn
http://abbess.dmyyro.cn
http://chillness.dmyyro.cn
http://carburization.dmyyro.cn
http://anglophile.dmyyro.cn
http://ataxic.dmyyro.cn
http://audible.dmyyro.cn
http://audient.dmyyro.cn
http://affinal.dmyyro.cn
http://benefactive.dmyyro.cn
http://cabomba.dmyyro.cn
http://binche.dmyyro.cn
http://apocalypse.dmyyro.cn
http://antiparallel.dmyyro.cn
http://centuried.dmyyro.cn
http://belemnite.dmyyro.cn
http://aganippe.dmyyro.cn
http://blandly.dmyyro.cn
http://autism.dmyyro.cn
http://alkyne.dmyyro.cn
http://ammo.dmyyro.cn
http://brome.dmyyro.cn
http://bacteriological.dmyyro.cn
http://auew.dmyyro.cn
http://astrologist.dmyyro.cn
http://bonanzagram.dmyyro.cn
http://accessable.dmyyro.cn
http://anastrophy.dmyyro.cn
http://www.dtcms.com/a/281242.html

相关文章:

  • 【目标追踪】MUTR3D: A Multi-camera Tracking Framework via 3D-to-2D Queries
  • MongoDB数据问题说明
  • css-css执行的三种方式和css选择器
  • AS32X601 系列 MCU 硬件最小系统设计与调试方案探析
  • Agentic AI 的威胁与缓解措施
  • 如何快速有效地在WordPress中添加Instagram动态
  • 【PTA数据结构 | C语言版】前序遍历二叉树
  • 零基础入门物联网-远程门禁开关:代码调试
  • 过滤数组中null、undefined、‘‘、等非真内容
  • AAAI-2025 | 同济大学面向嘈杂环境的音频视觉导航!BeDAViN:大规模音频-视觉数据集与多声源架构研究
  • OpenCSG QA:您的国产大模型与 Agent 管理平台
  • 变更缓冲池简介
  • 19.1 单元测试框架
  • ssm学习笔记day08mybatis
  • ESP32轻松实现UDP无线通信
  • 使用python的pillow模块将图片转化为灰度图,获取值和修改值
  • 雷军的 IP 革命:人格化力量如何重塑商业规则|创客匠人
  • uniapp微信小程序弹窗
  • 《汇编语言:基于X86处理器》第8章 高级过程(1)
  • 被人工智能激活的哲学
  • 短剧小程序的「技术革命」:从「粗放生长」到「精准运营」
  • Windows内核对象
  • 新方法!家长可用安卓或苹果,远程管理孩子使用iPhone的时长
  • LeetCode|Day12|58. 最后一个单词的长度|Python刷题笔记
  • 跨平台游戏引擎 Axmol-2.7.1 发布
  • C#中Static关键字解析
  • k8s环境使用Operator部署Seaweedfs集群(上)
  • AJAX 入门到精通
  • 堆内存、栈内存、内存地址
  • 作业:复制数组