前言:
win32只能使用MessageBox对话框,而MFC可以使用这两种。
1. CWnd::MessageBox
(1)函数原型:
int CWnd::MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType= MB_OK );
VS对MessageBox的宏定义:
WINUSERAPI
int
WINAPI
MessageBoxA(
__in_opt HWND hWnd,
__in_opt LPCSTR lpText,
__in_opt LPCSTR lpCaption,
__in UINT uType);
WINUSERAPI
int
WINAPI
MessageBoxW(
__in_opt HWND hWnd,
__in_opt LPCWSTR lpText,
__in_opt LPCWSTR lpCaption,
__in UINT uType);
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
(2)参数:
lpszText | 指向一个CString对象或以null结尾的字符串,其中包含了要显示的信息。 |
lpszCaption | 指向一个CString对象或以null结尾的字符串,被用作消息框标题。如果lpszCaption为NULL,则将使用缺省的题“Error”。 |
nType | 指定了消息框的内容和行为。 |
(3)按钮的形式:
MB_OK | 默认值,OK确认按钮。 |
MB_YESNO | YES,NO按钮 |
MB_ABORTRETRYIGNORE | Abort(放弃),Retr(重试),Ignore(忽略) |
MB_YESNOCANCEL | YES,NO,CANCEL按钮 |
MB_RETRYCANCEL | Retry(重试),Cancel(取消) |
MB_OKCANCEL | OK,Cancel按钮 |
(4)返回值:
指定了函数的结果。如果没有足够的内存以创建消息框,则返回0。
如果函数成功,并且消息框有对应的按钮,则返回值是下列菜单项的值之一。
返回值 | 按钮选中情况 |
IDABORT | Abort按钮被选中。 |
IDCANCEL | Cancel按钮被选中。 |
IDCONTINUE | Continue按钮被选中。 |
IDIGNORE | Ignore按钮被选中。 |
IDNO | No按钮被选中。 |
IDOK | OK按钮被选中。 |
IDRETRY | Retry按钮被选中。 |
IDYES | Yes按钮被选中。 |
(5)消息框图标:
这个函数创建并显示一个窗口,其中包含了应用程序提供的消息和标题,加上预定义的图标和按钮的组合,这些定义在消息框风格列表中。使用全局函数AfxMessageBox代替这个成员函数来为你的应用程序实现消息框。
下面显示了可以被用在消息框中的不同的系统图标:
MB_ICONHAND,MB_ICONSTOP和MB_ICONERROR | |
MB_ICONQUESTION | |
MB_ICONEXCLAMATION和MB_ICONWARNING | |
MB_ICONASTERISK和MB_ICONINFORMATION |
(6)示例:
void CMesBoxDemoDlg::OnBnClickedMesbox()
{
CString strText = _T("这是一个消息对话框!");
CString strCaption = _T("消息!");
int nType = MessageBox(strText, strCaption, MB_ICONINFORMATION | MB_OKCANCEL);
if ( nType == IDOK )
{
MessageBox(_T("消息对话框点击了OK按钮!"), _T("来自上一个消息对话框的消息!"), MB_ICONINFORMATION | MB_OKCANCEL);
}
}
效果图:
/*==========================================================================================*/
/*==========================================================================================*/
2. AfxMessageBox
(1)函数原型:
int AFXAPI AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp =0 );
int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) -1 );
(2)参数:
lpszText | 指向一个CString对象或者以null结尾的字符串,包含了要在消息框中显示的信息。 |
nType | 消息框的风格。对对话框应用任何一种消息框风格。 |
nIDHelp | 消息的帮助上下文ID。0表示将使用应用程序的缺省帮助上下文。 |
nIDPrompt | 用于引用字符串表中的字符串的唯一的ID。 |
(3)返回值:
如果没有足够的内存来显示消息框就返回零,否则可能是下列值之一:
· | IDABORT | 选择了Abort按钮。 |
· | IDCANCEL | 选择了Cancel按钮。 |
· | IDIGNORE | 选择了Ignore按钮。 |
· | IDNO | 选择了No按钮。 |
· | IDOK | 选择了OK按钮。 |
· | IDRETRY | 选择了Retry按钮。 |
· | IDYES | 选择了Yes按钮。 |
如果消息框具有Cancel按钮,那么当按下了ESC键或者是选择了Cancel按钮时,就会返回IDCANCEL值。如果消息框没有Cancel按钮,按下ESC键没有任何效果。
在格式化消息框中显示的字符串时,函数AfxFormatString1和AfxFormatString2非常有用。
(4)说明:
①在屏幕上显示一个消息框,这个重载函数的第一种形式在消息框中显示由lpszText指向的文本字符串,并使用nIDHelp来描述帮助上下文。当用户按下了帮助键(通常是F1)时,帮助上下文被用来跳转到相关的帮助主题。
②函数的第二种形式使用nIDPrompt所代表的字符串资源来在消息框中显示一个消息。相关的帮助页面通过nIDHelp的值来查找。如果使用了nIDHelp的缺省值(-1),则帮助上下文将使用字符串资源ID,即nIDPrompt。有关定义帮助上下文的更多信息参见《Visual C++程序员指南》中的“帮助主题”一文以及Visual C++联机文档中的“技术注释28”。
③消息框标题为项目名称。
(5)示例:
void CMesBoxDemoDlg::OnBnClickedMesbox()
{
AfxMessageBox(_T("消息1"));
char *pszMsg = "消息2";
AfxMessageBox(pszMsg);
CString strMsg("消息3");
AfxMessageBox(strMsg);
}
效果图: