平台 SDK: Windows 用户接口

MessageBox

MessageBox 函数创建,显示和操作一个消息框。 消息框包含应用程序定义的消息和标题,以及预定义图标和按钮的任意组合。

int MessageBox(
  HWND hWnd,          // 所属窗口句柄
  LPCTSTR lpText,     // 消息框中的文字  
  LPCTSTR lpCaption,  // 消息框标题  
  UINT uType          // 消息框风格
);

参数

  • hWnd

  • [in] 要创建消息框的所属窗口的句柄。如果此参数为 NULL,消息框有没有所属窗口。

  • lpText

  • [in] 指向包含要显示消息的以null结尾的字符串。

  • lpCaption

  • [in] 指向包含对话框标题的以null结尾的字符串。 如果此参数为NULL,则使用默认标题 错误。

  • uType

  • [in] 指定对话框的内容和行为。此参数可以是来自以下标志组的标志的组合。

    要指示消息框中显示的按钮,请指定以下值之一。

    含义
    MB_ABORTRETRYIGNORE消息框包含三个按钮:中止重试忽略
    MB_CANCELTRYCONTINUEWindows 2000/XP: 消息框包含三个按钮:取消重试继续。 使用此消息框类型而不是MB_ABORTRETRYIGNORE。
    MB_HELPWindows 95/98/Me, Windows NT 4.0 and later: 在消息框中添加一个帮助按钮。 当用户单击“帮助”按钮或按F1时,系统向所属窗口发送一条 WM_HELP 消息。
    MB_OK消息框包含一个按钮:确认。 这是默认值。
    MB_OKCANCEL消息框包含两个按钮: 确认 和 取消.
    MB_RETRYCANCEL消息框包含两个按钮: 重试 和 取消.
    MB_YESNO消息框包含两个按钮: 是 和 .
    MB_YESNOCANCEL消息框包含三个按钮: , 和 取消.


    要在消息框中显示图标,请指定以下值之一。

    含义
    MB_ICONEXCLAMATION, 
    MB_ICONWARNING
    消息框中会显示感叹号图标。
    MB_ICONINFORMATION, MB_ICONASTERISK消息框中会显示一个由圆圈中的小写字母i组成的图标。
    MB_ICONQUESTION消息框中会显示问号图标。
    MB_ICONSTOP, 
    MB_ICONERROR, 
    MB_ICONHAND
    消息框中会显示停止标志图标。


    要指示默认按钮,请指定以下值之一。

    含义
    MB_DEFBUTTON1第一个按钮是默认按钮。

    MB_DEFBUTTON1 是默认的除非 MB_DEFBUTTON2, MB_DEFBUTTON3, 或 MB_DEFBUTTON4 被h指定。

    MB_DEFBUTTON2第二个按钮是默认按钮。
    MB_DEFBUTTON3第三个按钮是默认按钮。
    MB_DEFBUTTON4第四个按钮是默认按钮。



    要指示对话框的模态,请指定以下值之一。

    含义
    MB_APPLMODAL在由 hWnd 参数标识的窗口中继续工作之前,用户必须响应消息框。 然而,用户可以移动到其他线程的窗口并在这些窗口中工作。

    根据应用程序中Windows的层次结构,用户可以移动到线程中的其他窗口。 消息框的父级的所有子窗口将自动禁用,但弹出窗口不会。

    MB_APPLMODAL 是默认的 如果 MB_SYSTEMMODAL 和 MB_TASKMODAL 两者都未被指定。

    MB_SYSTEMMODAL与MB_APPLMODAL相同,除非消息框具有WS_EX_TOPMOST样式。 使用系统模态消息框通知用户需要立即关注的严重的,潜在的破坏性错误(例如,内存不足)。该标志对用户与 hWnd 以外的窗口进行交互的能力没有任何影响。
    MB_TASKMODAL与MB_APPLMODAL相同,只有当hWnd参数为NULL时,属于当前线程的所有顶级窗口都将被禁用。 当调用应用程序或库没有可用的窗口句柄但仍需要阻止在调用线程中输入其他窗口而不挂起其他线程时使用此标志。


    要指定其他选项,请使用以下一个或多个值。

    含义
    MB_DEFAULT_DESKTOP_ONLYWindows NT/2000/XP: 与MB_SERVICE_NOTIFICATION相同,只是系统将仅在交互式窗口的默认桌面上显示消息框。 有关详细信息,请参阅 Window Stations and Desktops.

    Windows NT 4.0 and earlier: 如果当前的桌面不是默认桌面,则 MessageBox 将调用失败。

    Windows 2000/XP: 如果当前的桌面不是默认桌面,则 MessageBox 将不会返回,直到用户切换到默认桌面。

    Windows 95/98/Me: 这个标志没有效果。

    MB_RIGHT文本为右对齐。
    MB_RTLREADING在希伯来语和阿拉伯语系统上使用从右到左的阅读顺序显示消息和字幕文本。
    MB_SETFOREGROUND消息框将成为前台窗口。 在内部,系统调用消息框的 SetForegroundWindow 函数。
    MB_TOPMOST消息框使用WS_EX_TOPMOST窗口样式创建。
    MB_SERVICE_NOTIFICATIONWindows NT/2000/XP: 调用方是通知事件的用户服务。 该函数在当前活动桌面上显示一个消息框,即使没有用户登录到计算机。

    Terminal Services: 如果调用线程具有模拟令牌,则该函数将消息框定向到模拟令牌中指定的会话。如果设置此标志,则 hWnd 参数必须为NULL。 这样,消息框可以出现在与 hWnd 对应桌面以外的桌面上。有关Windows NT 3.51和Windows NT 4.0之间更改的更多信息,请参阅备注。



    MB_SERVICE_NOTIFICATION_NT3XWindows NT/2000/XP: 此值对应于为Windows NT版本3.51为MB_SERVICE_NOTIFICATION定义的值。

    有关Windows NT 3.51和Windows NT 4.0之间更改的更多信息,请参阅备注。



返回值

如果函数成功,则返回值是以下菜单项值之一。

含义
IDABORT中止 按钮被选择。
IDCANCEL取消 按钮被选择。
IDCONTINUE继续 按钮被选择。
IDIGNORE忽略 按钮被选择。
IDNO否 按钮被选择。
IDOK确定 按钮被选择。
IDRETRY重试 按钮被选择。
IDTRYAGAIN再试一次 按钮被选择。
IDYES是 按钮被选择。


如果消息框有一个 取消 按钮,则函数返回 IDCANCEL 值,如果按 ESC 键或选择 取消 按钮。 如果消息框没有 取消 按钮,按ESC不起作用。

如果函数失败,返回值为零。 要获取扩展错误信息,请调用 GetLastError.

备注

当你使用一个系统模式消息框,表明该系统内存不足时,字符串指向由 lpTextlpCaption 参数不应采取从资源文件中,因为加载资源的尝试可能会失败。

当一个对话框存在时,如果你创建一个对话框,请使用对话框的句柄作为 hWnd 参数。 hWnd 参数不应该标识子窗口,如对话框中的控件。

Windows 95/98/Me: 该系统最多可以支持16,364个窗口句柄。

Windows NT/2000/XP: MB_SERVICE_NOTIFICATION的值从Windows NT 4.0开始更改。 Windows NT 4.0通过在 MessageBox该映射只对由链接器设置的版本号小于4.0的可执行文件进行。

要构建使用MB_SERVICE_NOTIFICATION的服务,并且可以在Windows NT 3.x和Windows NT 4.0上运行,您可以执行以下操作之一。

  • 链接时指定版本号小于4.0

  • 在链接时,指定版本4.0。 在运行时,使用 GetVersionEx 函数检查系统版本。然后在Windows NT 3.x上运行时,使用MB_SERVICE_NOTIFICATION_NT3X; 并在Windows NT 4.0上使用MB_SERVICE_NOTIFICATION。

Windows 95/98/Me: 即使 MessageBoxW 存在,Microsoft Layer for Unicode也支持在所有Windows操作系统上提供更一致的行为。要使用此功能,必须向应用程序添加某些文件,如Windows 95/98 / Me系统上的Microsoft Layer for Unicode所述。

示例代码

有关示例,请参阅 显示消息框

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1及更高版本中。
  Windows 95/98/Me: 包含在Windows 95及更高版本中。
  Header: 声明于 Winuser.h; 包含于 Windows.h.
  Library: 使用 User32.lib.
  Unicode: 在所有平台上实现为Unicode和ANSI版本。 还支持Microsoft Layer for Unicode。