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_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_ICONERROR |
![]() | MB_ICONQUESTION |
![]() | MB_ICONEXCLAMATION或MB_ICONWARNING |
![]() | MB_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;
}
下图显示了上述代码示例的输出: