MessageBox
转自:http://baike.baidu.com/view/927800.htm
MessageBox
编辑本段简介
MessageBox是编程过程中,为了达到提示效果而设计的消息提示框。根据实际使用的不同需求,可以设定不同的参数值
编辑本段VB中的实例
函数原型:MessageBox.Show(Text,Title,MessageBoxButtons,MessageBoxIcon ,MessageBoxDefaultButtons)
参数说明:
(1)Text:必选项,消息框的正文。
(2)Title:可选项,消息框的标题。
(3)MessageBoxButtons:可选项,消息框的按钮设置,默认只显示【确定】按钮。
OK――确定 OKCancel――确定和取消 AbortRetryIgnore――终止、重试和忽略
YesNoCancel――是、否和取消 YesNo――是和否 RetryCancel――重试和取消
(4)MessageBoxIcon:对话框中显示的图标样式,默认不显示任何图标。
Question――问号 Information、Asterisk――i号 Error、Stop、Hand――错误号
Warning、Exclamation――!号 None――不显示任何图标
(5)MessageBoxDefaultButtons:可选项,对话框中默认选中的按钮设置。
DefaultButton1――第1个button是默认按钮
DefaultButton2――第2个button是默认按钮
DefaultButton3――第3个button是默认按钮
备注:函数原型中蓝色字体部分的参数,可以通过点来获取其后面跟随的参数值。
编辑本段C/C++中的用法
MessageBox(NULL,"text","title",BUTTON);
所属头文件:windows.h
参数title:string类型,指定消息对话框的标题。text:指定消息对话框中显示的消息,该参数可以是数值数据类型、字符串或boolean值。icon:Icon枚举类型,可选项,指定要在该对话框左侧显示的图标。button:Button枚举类型,可选项,指定显示在该对话框底部的按钮。default:数值型,可选项,指定作为缺省按钮的按钮编号,按钮编号自左向右依次计数,缺省值为1,如果该参数指定的编号超过了显示的按钮个数,那么MessageBox()函数将使用缺省值返回值Integer。函数执行成功时返回用户选择的按钮编号(例如1、2、3等),发生错误时返回-1。如果任何参数的值为NULL,MessageBox()函数返回NULL。
比如说,想弹出如图所示的窗口,命令为:
MessageBox(NULL,"MessageBoxText(内容)","Title(标题)",MB_OK);
如果想置顶
int iRet;
iRet=MessageBox(hwnd,"PLC报警!","对话框",MB_YESNO|MB_ICONQUESTION|MB_SYSTEMMODAL);
或
iRet=MessageBox(NULL,"PLC报警!","对话框",
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1|MB_SYSTEMMODAL);
增加一个焦点在第一个按钮上更有效。
编辑本段函数功能
编辑本段函数原型
int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT UType);
编辑本段参数
lpText:指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。
lpCaption:指向一个以NULL结尾的、用于对话框标题的字符串的指针。
uType:指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。
指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。
MB_ABORTRETRYIGNORE:消息框含有三个按钮:Abort,Retry和Ignore。
MB_OK:消息框含有一个按钮:OK。这是缺省值。
MB_OKCANCEL:消息框含有两个按钮:OK和Cancel。
MB_RETRYCANCEL:消息框含有两个按钮:Retry和Cancel。
MB_YESNO:消息框含有两个按钮:Yes和No。
MB_YESNOCANCEL:消息框含有三个按钮:Yes,No和Cancel。
指定下列标志中的一个来显示消息框中的图标:标志的含义如下。
MB_ICONEXCLAMATION:
MB_ICONWARNING:一个惊叹号出现在消息框。
MB_ICONINFORMATION:
MB_ICONASTERISK:一个圆圈中小写字母i组成的图标出现在消息框。
MB_ICONQUESTION:一个问题标记图标出现在消息框。
MB_ICONSTOP:
MB_ICONERROR:
MB_ICONHAND:一个停止消息图标出现在消息框。
指定下列标志中的一个来显不缺省的按钮:标志的含义如下。
MB_DEFBUTTON1:第一个按钮为缺省按钮。如果MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4没有被指定,则MB_DEFBUTTON1为缺省值。
MB_DEFBUTTON2;第二个按钮为缺省按钮。
MB_DEFBUTTON3:第三个按钮为缺省按钮。
MB_DEFBUTTON4:第四个按钮为缺省按钮。
指定下列标志中的一个来显示对话框的形态:标志的含义如卜。
MB_APPLMODAL:在hwnd参数标识的窗口中继续工作以前,用户一定响应消息框。但是,用户可以移动到其他线程的窗口且在这些窗口中工作。根据应用程序中窗口的层次机构,用户则以移动到线程内的其他窗口。所有母消息框的子窗口自动地失效,但是弹出窗口不是这样。如果既没有指定MB_SYSTEMMODAL也没有指定MB_TASKMOOAL,则MB_APPLMODAL为缺省的。
MB_SYSTEMMODAL:除了消息框有WB_EX_TOPMOST类型,MB_APPLMODAL和MB_SYSTEMMODAL一样。用系统模态消息框来改变各种各样的用户,主要的损坏错误需要立即注意(例如,内存溢出)。如果不是那些与hwnd联系的窗口,此标志对用户对窗口的相互联系没有影响。
MB_TASKMODAL:如果参数hwnd为NULL的话,那么除了所有属于当前线程高层次的窗口失效外,MB_TASKMODALL和MB_APPLMODAL一样。当调用应用程序或库没有一个可以得到的窗口句柄时,使用此标志。但仍需要阻止输入到调用线程的其他窗口,而不是搁置其他线程。
另外,可以指定下列标志。
MB_HELP:把一个Help按钮增加到消息框。选择Help按钮或按F1产生一个Help事件。
MB_RIGHT:文本为右调整。
MB_RTLREADING:用在Hebrew和Arabic系统中从右到左的顺序显示消息和大写文本。
MB_SETFOREGROUND:消息框变为前景窗口。在内部系统为消息个调用SetForegroundWindow函数。
MB_TOPMOSI:消息框用WS_EX_TOPMOST窗口类型来创建MB_SERVICE_NOTIFICATION。
对于Windows NT 4.0,MB_SERVICE_NOTIFICATION的值已经改变。对于旧的和新的值,请参见WINUSER。
Windows NT 4.O通过把旧值映射到MessageBox和MessageBoxEx执行中的新值,为先存在的服务程序提供逆兼容。此映射只为有了版本数目的可执行程序而做。
为了建立一个用MB_SERVICE_NOTIFICATION的服务器,且可以在Windows NT 3.X和Window NT 4.0上执行,可有两种选择。在连接时间,指定一个版本数目小于4.0的版本,或在连接时间,指定一个4.0版本。在运行时间,用函数GetVersionEx来检测系统版本,然后在Windows NT 3.X上用MB_SERVICE_NOTIFICATION_NT 3.x来运行和在Windows
NT 4.0上用MB_SERVICE_NOTIFICAION来运行。MB_SERVCE_NOTIFICATION_NT3.x(WindowNT)此值响应于为WindowNT3.51的MB_SERVICE_NOTIFICAION
定义的值。
编辑本段返回值
IDABORT:Abort 按钮被选中。IDCANCEL:Cancel按钮被选中。IDIGNORE:Ignore按钮被选中。
IDNO:NO按钮被选中。IDOK:OK按钮被选中。IDRETRY:RETRY按钮被选中。
IDYES:YES按钮被选中。
MessageBox的返回值默认定义 MessageBox的返回值其实都是整型的数,以下是默认的定义
#define IDOK 1
#define IDCANCEL 2
#define IDABORT 3
#define IDRETRY 4
#define IDIGNORE 5
#define IDYES 6
#define IDNO 7
#if(WINVER >= 0x0400)
#define IDCLOSE 8
#define IDHELP 9
编辑本段备注
当一个应用程序调用MessageBox,且为uType参数指定MB_ICONHAND和MB_SYSTEMMODAL标志时,系统不管可用内存为多少,直接显示结果消息框。当这些标志被指定,系统把消息框文本的长度局限于三行。系统不能自动截断要填到消息框的行,但是消息字符串一定含有回车换行,以在合适的位置换行。
如果在对话框出现的的同时创建了消息框,则可使用对话框的句柄作为hwnd参数,hwnd参数不应该标识一个子窗口,例如对话框中的一个控制。
Windows 95:系统可以支持最大达16364个窗口句柄。
Windows CE:Windows CE 不支持uType参数的下列值:
MB_STSTEMMODAL;MB_TASKMODAL;MB_HELP;MB_RTLREADING;MB_DEFAULT_DESKTOP_ONLY;
MB_SERVICE_NOTIFICATION;MB_USERICON。
不支持下列返回值:IDCLOSE;IDHELP。
编辑本段速查
Windows:3.1及以上版本:Windows:95及以上版本;Windows:1.0及以上版本;头文件:Winuser.h;库文件:USer32.lib;URicode:在Windows
NT上实现为Unicode和ANSI两种版本。
----------------------------------------------------------------------------------------------------------------------------------------------------
在MFC里面MessageBox被封装成了更方便使用的另外一种形式:
*************************************************************以下内容引自msdn***************************************************************
int MessageBox(
LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK
);
Parameters
lpszText
Points to a CString object or null-terminated string containing the message to be displayed.
lpszCaption
Points to a CString object or null-terminated string to be used for the message-box caption. If lpszCaption is NULL, the default caption "Error" is used.
nType
Specifies the contents and behavior of the message box.
Return Value
Specifies the outcome of the function. It is 0 if there is not enough memory to create the message box.
Remarks
Use the global function AfxMessageBox instead of this member function to implement a message box in your application.
The following shows the various system icons that can be used in a message box:
<IMG alt="" src="ms-help://MS.MSDNQTR.2005JUL.1033/vclib/html/vc364f1.gif" border=0>
|
<IMG alt="" src="ms-help://MS.MSDNQTR.2005JUL.1033/vclib/html/vc364f2.gif" border=0>
|
<IMG alt="" src="ms-help://MS.MSDNQTR.2005JUL.1033/vclib/html/vc364f3.gif" border=0>
|
<IMG alt="" src="ms-help://MS.MSDNQTR.2005JUL.1033/vclib/html/vc364f4.gif" border=0>
|
*************************************************************以上内容引自msdn***************************************************************
下面的例子可以让我们对比两种函数的用法,两行代码的功能都是显示一个消息框,内容为“示例用法”
::MessageBox(NULL, "示例用法", "demo", MB_OK);
MessageBox("示例用法");//采用了一些C++的语法特性使用消息框用起来更顺手