【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);}