MessageBoxA 函数 (winuser.h)
显示一个模式对话框,其中包含一个系统图标、一组按钮和一条简短的应用程序特定消息,例如状态或错误信息。 消息框返回一个整数值,该值指示用户单击了哪个按钮。
语法
int MessageBoxA(
[in, optional] HWND hWnd,
[in, optional] LPCSTR lpText,
[in, optional] LPCSTR lpCaption,
[in] UINT uType
);
参数
[in, optional] hWnd
类型:HWND
要创建的消息框的所有者窗口的句柄。 如果此参数为 NULL,则消息框没有所有者窗口。
[in, optional] lpText
类型: LPCTSTR
要显示的消息。 如果字符串由多行组成,则可以在每行之间使用回车符和/或换行符分隔这些行。
[in, optional] lpCaption
类型: LPCTSTR
对话框标题。 如果此参数为 NULL,则默认标题为 Error。
[in] uType
类型: UINT
对话框的内容和行为。 此参数可以是以下标志组中的标志的组合。
若要指示消息框中显示的按钮,请指定以下值之一。
值 | 含义 |
---|---|
|
消息框包含三个按钮: “中止”、“ 重试”和 “忽略”。 |
|
消息框包含三个按钮: 取消、 重试、 继续。 使用此消息框类型而不是MB_ABORTRETRYIGNORE。 |
|
向消息框添加 “帮助 ”按钮。 当用户单击“ 帮助 ”按钮或按 F1 时,系统会向所有者发送 WM_HELP 消息。 |
|
消息框包含一个按钮: “确定”。 这是默认值。 |
|
消息框包含两个按钮: “确定” 和 “取消”。 |
|
消息框包含两个按钮: 重试 和 取消。 |
|
消息框包含两个按钮: “是 ”和“ 否”。 |
|
消息框包含三个按钮: “是”、“ 否”和 “取消”。 |
若要在消息框中显示图标,请指定以下值之一。
若要指示默认按钮,请指定以下值之一。
若要指示对话框的形式,请指定以下值之一。
若要指定其他选项,请使用以下一个或多个值。
值 | 含义 |
---|---|
|
与交互式窗口工作站的桌面相同。 有关详细信息,请参阅 窗口工作站。
如果当前输入桌面不是默认桌面,则在用户切换到默认桌面之前 ,MessageBox 不会返回。 |
|
文本右对齐。 |
|
在希伯来语和阿拉伯语系统上使用从右到左的阅读顺序显示消息和描述文字文本。 |
|
消息框将成为前台窗口。 在内部,系统为消息框调用 SetForegroundWindow 函数。 |
|
使用 WS_EX_TOPMOST 窗口样式创建消息框。 |
|
调用方是通知用户某个事件的服务。 函数在当前活动桌面上显示一个消息框,即使没有用户登录到计算机也是如此。
终端服务: 如果调用线程具有模拟令牌,则函数会将消息框定向到模拟令牌中指定的会话。 如果设置了此标志, 则 hWnd 参数必须为 NULL。 这样,消息框就可以出现在与 hWnd 对应的桌面以外的桌面上。 有关使用此标志的安全注意事项的信息,请参阅 Interactive Services。 具体而言,请注意,此标志可以在锁定的桌面上生成交互式内容,因此只应用于一组非常有限的方案,例如资源耗尽。 |
返回值
类型: int
如果消息框有“取消”按钮,则如果按下 ESC 键或选择了“取消”按钮,函数将返回 IDCANCEL 值。 如果消息框没有 “取消 ”按钮,则按 ESC 将不起作用 - 除非存在MB_OK按钮。 如果显示MB_OK按钮,并且用户按 ESC,则返回值为 IDOK。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
如果函数成功,则返回值为以下菜单项值之一。
返回代码/值 | 说明 |
---|---|
|
已选择 “中止 ”按钮。 |
|
已选择 “取消 ”按钮。 |
|
已选择“ 继续 ”按钮。 |
|
已选择 “忽略 ”按钮。 |
|
已选择 “否 ”按钮。 |
|
已选择 “确定 ”按钮。 |
|
已选择 “重试 ”按钮。 |
|
已选择“ 重试 ”按钮。 |
|
已选择 “是 ”按钮。 |
注解
通过将 uType 参数设置为相应的标志值,可以在消息框中使用以下系统图标。
图标 | 标志值 |
---|---|
MB_ICONHAND、 MB_ICONSTOP 或 MB_ICONERROR | |
MB_ICONQUESTION | |
MB_ICONEXCLAMATION 或 MB_ICONWARNING | |
MB_ICONASTERISK 或 MB_ICONINFORMATION |
在 MessageBox 显示字符串的开头添加两个从右到左的标记 () ,由 Unicode 格式字符 U+200F 表示,MessageBox 呈现引擎将解释为 MessageBox 的读取顺序, (RTL) 呈现为从右到左。
使用系统模式消息框指示系统内存不足时,不应从资源文件中获取 lpText 和 lpCaption 参数指向的字符串,因为尝试加载资源可能会失败。
如果在对话框存在时创建消息框,请使用对话框的句柄作为 hWnd 参数。 hWnd 参数不应标识子窗口,例如对话框中的控件。
示例
在以下示例中,应用程序显示一个消息框,该消息框在出现错误条件后提示用户执行操作。 消息框显示描述错误条件及其解决方法的消息。 MB_CANCELTRYCONTINUE样式指示 MessageBox 提供三个按钮,用户可以选择如何继续操作。 MB_DEFBUTTON2样式将默认焦点设置在消息框的第二个按钮上,在本例中为“重试”按钮。
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;
}
下图显示了上述代码示例的输出:
有关另一个消息框示例,请参阅 显示消息框。
注意
winuser.h 标头将 MessageBox 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
API 集 | windows 8 中引入的 ext-ms-win-ntuser-dialogbox-l1-1-0 () |
请参阅
概念性
其他资源
引用