MessageBox函数
显示模式对话框,其中包含系统图标,一组按钮和简要的特定于应用程序的消息,例如状态或错误信息。消息框返回一个整数值,指示用户单击的按钮。
语法
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
参数
hWnd
类型:HWND
要创建的消息框的所有者窗口的句柄。如果此参数为NULL,则消息框没有所有者窗口。
lpText
类型:LPCTSTR
要显示的消息。如果字符串由多行组成,则可以使用每行之间的回车符和/或换行符分隔行。
lpCaption
类型:LPCTSTR
对话框标题。如果此参数为NULL,则默认标题为“ 错误”。
uType
输入:UINT
对话框的内容和行为。此参数可以是来自以下标志组的标志的组合。
要指示消息框中显示的按钮,请指定以下值之一。
值含义 MB_ABORTRETRYIGNORE
0x00000002L
消息框包含三个按钮:Abort,Retry和Ignore。 MB_CANCELTRYCONTINUE
0x00000006L
消息框包含三个按钮:取消,再试一次,继续。使用此消息框类型而不是MB_ABORTRETRYIGNORE。 MB_HELP
0x00004000L
在消息框中 添加“ 帮助”按钮。当用户单击“ 帮助”按钮或按F1时,系统会向所有者发送WM_HELP消息。 MB_OK
0x00000000L
消息框包含一个按钮:确定。这是默认值。 MB_OKCANCEL
0x00000001L
消息框包含两个按钮:确定和取消。 MB_RETRYCANCEL
0x00000005L
消息框包含两个按钮:重试和取消。 MB_YESNO
0x00000004L
消息框包含两个按钮:是和否。 MB_YESNOCANCEL
0x00000003L
消息框包含三个按钮:是,否和取消。
要在消息框中显示图标,请指定以下值之一。
值含义 MB_ICONEXCLAMATION
0x00000030L
消息框中会出现一个惊叹号图标。 MB_ICONWARNING
0x00000030L
消息框中会出现一个惊叹号图标。 MB_ICONINFORMATION
0x00000040L
消息框中将出现一个由圆圈 中的小写字母i组成的图标。 MB_ICONASTERISK
0x00000040L
消息框中将出现一个由圆圈 中的小写字母i组成的图标。 MB_ICONQUESTION
0x00000020L
消息框中会出现一个问号图标。不再推荐使用问号消息图标,因为它不能清楚地表示特定类型的消息,并且因为作为问题的消息的措辞可以应用于任何消息类型。此外,用户可以将消息符号问号与帮助信息混淆。因此,请勿在消息框中使用此问号消息符号。系统继续支持其仅包含向后兼容性。 MB_ICONSTOP
0x00000010L
消息框中会出现一个停止标志图标。 MB_ICONERROR
0x00000010L
消息框中会出现一个停止标志图标。 MB_ICONHAND
0x00000010L
消息框中会出现一个停止标志图标。
要指示默认按钮,请指定以下值之一。
值含义 MB_DEFBUTTON1
0x00000000L
第一个按钮是默认按钮。 MB_DEFBUTTON1是默认值,除非指定了MB_DEFBUTTON2,MB_DEFBUTTON3或MB_DEFBUTTON4。
MB_DEFBUTTON2
0x00000100L
第二个按钮是默认按钮。 MB_DEFBUTTON3
0x00000200L
第三个按钮是默认按钮。 MB_DEFBUTTON4
0x00000300L
第四个按钮是默认按钮。
要指示对话框的模态,请指定以下值之一。
值含义 MB_APPLMODAL
0x00000000L
在继续在hWnd参数标识的窗口中工作之前,用户必须响应消息框。但是,用户可以移动到其他线程的窗口并在这些窗口中工作。 根据应用程序中窗口的层次结构,用户可能能够移动到线程内的其他窗口。消息框的父级的所有子窗口都将自动禁用,但弹出窗口不会自动禁用。
如果既未指定MB_SYSTEMMODAL也未指定MB_TASKMODAL,则MB_APPLMODAL是缺省值。
MB_SYSTEMMODAL
0x00001000L
与MB_APPLMODAL相同,但消息框具有WS_EX_TOPMOST样式。使用系统模式消息框通知用户需要立即注意的严重且可能具有破坏性的错误(例如,内存不足)。此标志不会影响用户与除与hWnd关联的窗口之外的窗口进行交互的能力。 MB_TASKMODAL
0x00002000L
与MB_APPLMODAL相同,但如果hWnd参数为NULL,则禁用属于当前线程的所有顶级窗口。当调用应用程序或库没有可用的窗口句柄但仍需要阻止输入到调用线程中的其他窗口而不挂起其他线程时,请使用此标志。
要指定其他选项,请使用以下一个或多个值。
值含义 MB_DEFAULT_DESKTOP_ONLY
0x00020000L
与交互式窗口站的桌面相同。有关更多信息,请参阅窗口站。 如果当前输入桌面不是默认桌面,则在用户切换到默认桌面之前,MessageBox不会返回。
MB_RIGHT
0x00080000L
该文本是正确的。 MB_RTLREADING
0x00100000L
在希伯来语和阿拉伯语系统上使用从右到左的阅读顺序显示消息和标题文本。 MB_SETFOREGROUND
0x00010000L
消息框成为前景窗口。在内部,系统调用消息框的SetForegroundWindow函数。 MB_TOPMOST
0x00040000L
使用WS_EX_TOPMOST窗口样式创建消息框。 MB_SERVICE_NOTIFICATION
0x00200000L
呼叫者是通知用户事件的服务。即使没有用户登录到计算机,该功能也会在当前活动桌面上显示一个消息框。 终端服务:如果调用线程具有模拟令牌,则该函数会将消息框定向到模拟令牌中指定的会话。
如果设置了此标志,则hWnd参数必须为NULL。这样消息框可以显示在与hWnd对应的桌面以外的桌面上。
有关使用此标志的安全注意事项的信息,请参阅交互式服务。特别要注意,此标志可以在锁定的桌面上生成交互式内容,因此应仅用于非常有限的一组场景,例如资源耗尽。
返回值类型
输入:int
如果一个消息框有一个取消按钮,则该函数将返回IDCANCEL如果或者ESC键被按下或值取消按钮被选择。如果消息框没有“ 取消”按钮,则按ESC无效。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。
如果函数成功,则返回值是以下菜单项值之一。
返回代码/值描述 IDABORT
3
的中止按钮被选中。 IDCANCEL
2
“ 取消”按钮已被选中。 IDCONTINUE
11
该继续按钮被选中。 IDIGNORE
五
“ 忽略”按钮已被选中。 证件号码
7
在没有按钮被选中。 IDOK
1
在OK按钮被选中。 IDRETRY
4
选择了 “ 重试”按钮。 IDTRYAGAIN
10
选中了 “ 再试一次”按钮。 IDYES
6
该是按钮被选中。
备注
通过将uType参数设置为相应的标志值,可以在消息框中使用以下系统图标。
图标标记值MB_ICONHAND,MB_ICONSTOP或MB_ICONERRORMB_ICONQUESTIONMB_ICONEXCLAMATION或MB_ICONWARNINGMB_ICONASTERISK或MB_ICONINFORMATION
在MessageBox显示字符串的开头添加由Unicode格式化字符U + 200F表示的两个从右到左标记(RLM),由MessageBox呈现引擎解释,以便将MessageBox的读取顺序呈现为从右到左(RTL)。
当您使用系统模式消息框指示系统内存不足时,不应从资源文件中获取lpText和lpCaption参数指向的字符串,因为尝试加载资源可能会失败。
如果在存在对话框时创建消息框,请使用对话框的句柄作为hWnd参数。该的hWnd参数不应该确定一个子窗口,如对话框中的控制。
例子
在以下示例中,应用程序显示一个消息框,在发生错误情况后提示用户执行操作。消息框显示描述错误情况以及如何解决错误的消息。该MB_CANCELTRYCONTINUE风格指导的MessageBox提供三个按钮与用户可以选择如何继续。该MB_DEFBUTTON2样式设置默认的焦点在消息框中的第二个按钮,在这种情况下,再试一次按钮。
C ++复制
int DisplayResourceNAMessageBox()
{
int msgboxID = MessageBox(
NULL,
(LPCWSTR)L"Resource not available\nDo you want to try again?",
(LPCWSTR)L"Account Details",
MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
);
switch (msgboxID)
{
case IDCANCEL:
// TODO: add code
break;
case IDTRYAGAIN:
// TODO: add code
break;
case IDCONTINUE:
// TODO: add code
break;
}
return msgboxID;
}
下图显示了上述代码示例的输出: