当前位置: 首页 > 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://www.lryc.cn/news/589340.html

相关文章:

  • Kafka与Flink打造流式数据采集方案:以二手房信息为例
  • C++ Filesystem Library 全解
  • 20250715正面看MIPI接口的LCD屏正常,侧面看发红是什么原因?
  • 12.6 Google黑科技GShard:6000亿参数MoE模型如何突破显存限制?
  • C++-linux系统编程 8.进程(三)孤儿进程、僵尸进程与进程回收
  • 算法学习笔记:22.贪心算法之霍夫曼编码 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 多相机depth-rgb图组完整性分拣器_MATLAB实现
  • 魔搭官方教程【快速开始】-swift 微调报错:`if v not in ALL_PARALLEL_STYLES`
  • 线上项目-升级redis8.0.3遇到的错
  • iOS高级开发工程师面试——关于网络
  • el-tooltip 快速滚动的时候出现残影如何解决 vue3
  • 学习嵌入式的第二十八天-数据结构-(2025.7.15)进程和线程
  • 20250715武汉xx公司面试一面
  • [AI-video] Web UI | Streamlit(py to web) | 应用配置config.toml
  • 索尼(SONY)摄像机mp4文件删除覆盖的恢复方法
  • 如何选择影视会员api接口?
  • 【字节跳动】数据挖掘面试题0019:带货直播间推荐:现在有一个带货的直播间,怎么把它精准地推送给有需要的用户
  • Flutter 入门指南:从基础到实战
  • 劳务派遣vs劳务外包:HR必懂的区别
  • 场景设计题+智力题
  • 《星盘接口9:永恒之门》
  • flutter下的webview适配rem问题
  • easy-springdoc
  • 手撕线程池详解(C语言源码+解析)
  • 35.KMP 算法
  • 分发糖果-leetcode
  • Python 字典 (Dictionary) 详解
  • JavaScript进阶篇——第三章 箭头函数核心
  • RabbitMQ第三章(企业级MQ应用方案)
  • AI大模型应用架构演进:从LLM基础到Agent协作的范式转移