MessageBox

编辑:森严网互动百科 时间:2019-11-12 12:01:22
编辑 锁定
MessageBox显示一个模态对话框,其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息,如状态或错误的信息。消息框中返回一个整数值,该值指示用户单击了哪个按钮。
函数名
MessageBox
作    用
弹出模式对话框
所属头文件
Windows.h和afxwin.h
编程语言
C/C++,VB

MessageBox函数

编辑

MessageBox函数原型

//我们一般理解为:



int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);



//其实它是根据Unicode定义的



WINUSERAPI int WINAPI MessageBoxA(

HWND hWnd,

LPCSTR lpText,

LPCSTR lpCaption,

UINT uType);


WINUSERAPI int WINAPI MessageBoxW(

HWND hWnd,

LPCWSTR lpText,

LPCWSTR lpCaption,

UINT uType);


#ifdef UNICODE

#define MessageBox MessageBoxW//如果启用Unicode库,就用MessageBoxW

#else

#define MessageBox MessageBoxA//否则,就用MessageBoxA

#endif

MessageBox参数

hWnd:
此参数代表消息框拥有的窗口。如果为NULL,则消息框没有拥有窗口。
lpText:
消息框的内容。如果使用了Unicode库,则把文本变成:
TEXT(/*sometext*/)
lpCaption:
消息框的标题。如果使用了Unicode库,则把文本变成:
TEXT(/*sometext*/)
uType:
指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。指定下列标志中的一个来显示消息框中的按钮以及图标。

MessageBoxuType参数

按钮:
按钮参数
含义
MB_OK
默认值。有一个确认按钮在里面。
MB_YESNO
有是和否在里面。
MB_ABORTRETRYIGNORE
有Abort(放弃),Retry(重试)和Ignore(跳过)
MB_YESNOCANCEL
消息框含有三个按钮:Yes,No和Cancel
MB_RETRYCANCEL
有Retry(重试)和Cancel(取消)
MB_OKCANCEL
消息框含有两个按钮:OK和Cancel
附:
//按钮
#define MB_OK 0x00000000L
#define MB_OKCANCEL 0x00000001L
#define MB_ABORTRETRYIGNORE 0x00000002L
#define MB_YESNOCANCEL 0x00000003L
#define MB_YESNO 0x00000004L
#define MB_RETRYCANCEL 0x00000005L
//图标
#define MB_ICONHAND 0x00000010L
#define MB_ICONQUESTION 0x00000020L
#define MB_ICONEXCLAMATION 0x00000030L
#define MB_ICONASTERISK 0x00000040L
#define MB_USERICON 0x00000080L
//图标声明
#define MB_ICONWARNINGMB_ICONEXCLAMATION
#define MB_ICONERRORMB_ICONHAND
#define MB_ICONINFORMATIONMB_ICONASTERISK
#define MB_ICONSTOPMB_ICONHAND
//默认按钮声明
#define MB_DEFBUTTON1 0x00000000L
#define MB_DEFBUTTON2 0x00000100L
#define MB_DEFBUTTON3 0x00000200L
#if(WINVER>=0x0400)
#define MB_DEFBUTTON4 0x00000300L//如果支持第四个MessageBox按钮的话,定义DEFButton4
#endif
//对话框模型定义
#define MB_APPLMODAL 0x00000000L
#define MB_SYSTEMMODAL 0x00001000L
#define MB_TASKMODAL 0x00002000L
#define MB_HELP 0x00004000L//是否拥有帮助按钮
//特殊声明
#define MB_NOFOCUS 0x00008000L
#define MB_SETFOREGROUND 0x00010000L
#define MB_DEFAULT_DESKTOP_ONLY 0x00020000L
#define MB_TOPMOST 0x00040000L
#define MB_RIGHT 0x00080000L
#define MB_RTLREADING 0x00100000L

图标:
参数含义
MB_ICONEXCLAMATION
一个惊叹号出现在消息框
MB_ICONWARNING
一个惊叹号出现在消息框
MB_ICONINFORMATION
一个圆圈中小写字母i组成的图标出现在消息框
MB_ICONASTERISK
一个圆圈中小写字母i组成的图标出现在消息框
MB_ICONQUESTION
一个问题标记图标出现在消息框
MB_ICONSTOP
一个停止消息图标出现在消息框
MB_ICONERROR
一个停止消息图标出现在消息框
MB_ICONHAND
一个停止消息图标出现在消息框
形态:
参数
含义
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_DEFAULT_DESKTOP_ONLY
接收输入的当前桌面一定是一个缺省桌面。否则,函数调用失败。缺省桌面是一个在用户已经纪录且以后应用程序在此上面运行的桌面。
MB_HELP
把一个Help按钮增加到消息框。选择Help按钮或按F1产生一个Help事件。
MB_RIGHT
文本为右调整
MB_RTLREADING
用在Hebrew和Arabic系统中从右到左的顺序显示消息和大写文本。
MB_SETFOREGROUND
消息框变为前景窗口。在内部系统为消息个调用SetForegroundWindow函数。
MB_TOPMOST
消息框用WS_EX_TOPMOST窗口类型来创建MB_SERVICE_NOTIFICATION。

MessageBox返回值

ID
选择了……
IDOK(1)
OK
IDCANCEL(2)
CANCEL
IDABORT(3)
ABORT
IDRETRY(4)
RETRY
IDIGNORE(5)
IGNORE
IDYES(6)
YES
IDNO(7)
NO

MessageBox备注

通过将 uType 参数设置为相应的标志值,可以在消息框中系统图标,具体图标可参见MSDN网站。
图标
标志位值
 
MB_ICONHAND, MB_ICONSTOP, 或者MB_ICONERROR
 
MB_ICONQUESTION
 
MB_ICONEXCLAMATION 或者 MB_ICONWARNING
 
MB_ICONASTERISK 或者 MB_ICONINFORMATION
添加两个从右到左标记 (RLMs),Unicode 格式字符中用 U+200F表示。在消息框显示字符串的开头被由 MessageBox 渲染引擎解释,以致造成 MessageBox 的阅读顺序,呈现为从右向左 (RTL) 。
当您使用一个系统模式消息框指示时,当系统内存不足时,由 lpText 和 lpCaption 的参数的字符串不应被从资源文件,因为加载资源的尝试可能会失败。
如果在一个对话框存在时创建一个消息框,则使用对话框的句柄作为hWnd 参数。hWnd参数不应指定为一个子窗口,就像对话框中的控件一样。

MessageBox实例

#include<windows.h>
//切记!当调用<windows.h>时,不要调用MFC!(Afx.h)
int main()
{
    int result = MessageBox( NULL , TEXT("这是对话框") , TEXT("你好") , MB_ICONINFORMATION|MB_YESNO);
    switch(result)/*注意!使用Unicode应用TEXT包围字串*/
{
    case IDYES:MessageBox(NULL,TEXT("您选择了YES"),TEXT("YES"),MB_OK);break;
    case IDNO:MessageBox(NULL,TEXT("您选择了NO"),TEXT("NO"),MB_OK);break;
}
return 0;
}
第一步:弹出对话框。语句:
int result = MessageBox(NULL,TEXT("这是对话框"),TEXT("你好"),MB_ICONINFORMATION|MB_YESNO);
对话框弹出 对话框弹出
选择是:语句:
case IDYES:MessageBox(NULL,TEXT("您选择了YES"),TEXT("YES"),MB_OK);break;
选择Yes 选择Yes
选择否:语句:
case IDNO:MessageBox(NULL,TEXT("您选择了NO"),TEXT("NO"),MB_OK);break;
选择No 选择No

MessageBoxMFC特例

编辑
假如您创建了一个MFC工程,如果工程文档中有MainFrm.cpp的话,那么,本函数就被封装成了:
intMessageBox(LPCTSTRlpszText,LPCTSTRlpszCaption=NULL,UINTnType=MB_OK);

MessageBox参数

lpszText:指向一个字符串包含要显示的消息。
lpszCaption:指向一个字符串包含标题。
nType:指定消息框的内容和行为。

MessageBox返回值

指定函数的结果。
下面的例子可以让我们对比两种函数的用法,两行代码的功能都是显示一个消息框,内容为“示例用法”
::MessageBox(NULL, "示例用法", "demo", MB_OK);
MessageBox("示例用法");//采用了一些C++的语法特性使用消息框用起来更顺手

MessageBoxVB方法

编辑
函数原型:
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是默认按钮
备注:函数原型中蓝色字体部分的参数,可以通过点来获取其后面跟随的参数值。
词条标签:
计算机学