MFC提供了两个函数可以直接生成指定风格的消息对话框,这两个函数就是CWnd类的成员函数MessageBox()和全局函数AfxMessageBox()。
一、CWnd::MessageBox()函数
1. 函数原型
int MessageBox(
LPCTSTR lpszText, //lpszText:需要显示的消息字符串。
LPCTSTR lpszCaption = NULL, //lpszCaption:消息对话框的标题字符串。默认值为NULL。
UINT nType = MB_OK //nType:消息对话框的风格和属性。默认为MB_OK风格,即只有“确定”按钮
);
nType 取值 | 参数说明 |
MB_ABORTRETRY | 有“终止”、“重试”和“忽略”按钮 |
MB_OK | 有“确定”按钮 |
MB_OKCANCEL | 有“确定”和“取消”按钮 |
MB_RETRYCANCEL | 有“重试”和“取消”按钮 |
MB_YESNO | 有“是”和“否”按钮 |
MB_YESNOCANCEL | 有“是”、“否”和“取消”按钮 |
2.用法
MessageBox("这是一个两种属性的消息框!","标题", MB_ICONEXCLAMATION|MB_OKCANCEL );
二、AfxMessageBox()函数
1. 函数原型:
int AfxMessageBox(
LPCTSTR lpszText, //lpszText:同CWnd::MessageBox()函数
UINT nType = MB_OK, //lpszText:同CWnd::MessageBox()函数
UINT nIDHelp = 0 //此消息的帮助的上下文ID。默认值为0
);
2. 用法:
使用时,可以直接调用AfxMessageBox(LPCTSTR lpszText);
默认风格为AfxMessageBox(LPCTSTR lpszText,MB_OK|MB_ICONEXCLAMATION );
也可以通过nType指定风格。
三、返回值
两者的返回值就是用户在消息对话框上单击的按钮的ID,可以是以下值:
IDABORT:单击“终止”按钮。
IDCANCEL:单击“取消”按钮。
IDIGNORE:单击“忽略”按钮。
IDNO:单击“否”按钮。
IDOK:单击“确定”按钮。
IDRETRY:单击“重试”按钮。
IDYES:单击“是”按钮。
四、AfxMessageBox()与MessageBox()的区别
1、MessageBox()是标准的Win32 API函数,可以直接使用;AfxMessageBox是MFC库提供的全局函数,提供了多种重载形式,需要MFC框架支持(带有afx都是基于框架的函数)。
所以在Win32 SDK的情况下,只能使用MessageBox(此时MessageBox采用Win 32中的原型,hWnd设为NULL);
在MFC中,两个都能使用(此时MessageBox采用MFC中的原型,在CWnd类或者子类中使用),但是最好尽量使用AfxMessageBox,原因如下:
(1)在MFC中能用MessageBox()的地方都能用AfxMessageBox(),也就是说完全可以使用后者代替前者;
(2)AfxMessageBox这个全局函数最安全,也最简单方便,因为它是一个全局函数所以不需要对应的一个窗口类。
2、MessageBox较正式,常用在要提交的应用程序版本中,可控制标题内容,而不必采用含义不明的可执行文件名为标题;
AfxMessageBox不能控制消息框标题,常用于调试程序时的内部数据输出或警告(更多的时候是用于调试)。
3、MessageBox在Win 32中的原型,如果第一个参数hWnd设置为NULL,则生成的非模态对话框;
AfxMessageBox生成的是模态对话框,你不进行确认时程序不往下运行,它会阻塞你当前的线程,除非你程序是多线程的程序,否则只有等待模态对话框被确认。
五、举例
void CAdditionDlg::OnBnClickedAddButton()
{
// TODO: Add your control notification handler code here
INT_PTR nRes;
// 显示messagebox消息对话框
//nRes = MessageBox(_T("您确定要进行加法计算吗?"), _T("加法计算器"), MB_OKCANCEL | MB_ICONQUESTION);
//显示afxmessagebox消息对话框
//nRes = AfxMessageBox(_T("您确定要进行加法计算吗?"), MB_OKCANCEL | MB_ICONQUESTION,0);
// 判断消息对话框返回值。如果为IDCANCEL就return,否则继续向下执行
if (IDCANCEL == nRes)
return;
// 将各控件中的数据保存到相应的变量
UpdateData(TRUE);
// 将被加数和加数的加和赋值给m_editSum
m_editSum = m_editSummand + m_editAddend;
// 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值
UpdateData(FALSE);
// 设置属性对话框为向导对话框
//sheet.SetWizardMode();
}
以上整理自
1、鸡啄米:http://www.jizhuomi.com/software/171.html——VS2010/MFC编程入门之十六(对话框:消息对话框)
2、http://blog.csdn.net/holybin/article/details/28403109