MessageBox函数

显示模式对话框,其中包含系统图标,一组按钮和简要的特定于应用程序的消息,例如状态或错误信息。消息框返回一个整数值,指示用户单击的按钮。

语法

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

参数

hWnd

类型:HWND

要创建的消息框的所有者窗口的句柄。如果此参数为NULL,则消息框没有所有者窗口。

lpText

类型:LPCTSTR

要显示的消息。如果字符串由多行组成,则可以使用每行之间的回车符和/或换行符分隔行。

lpCaption

类型:LPCTSTR

对话框标题。如果此参数为NULL,则默认标题为“ 错误”

uType

输入:UINT

对话框的内容和行为。此参数可以是来自以下标志组的标志的组合。

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

含义

MB_ABORTRETRYIGNORE

0x00000002L

消息框包含三个按钮:AbortRetryIgnore

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_DEFBUTTON2MB_DEFBUTTON3MB_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_ICONERROR的图标MB_ICONHANDMB_ICONSTOPMB_ICONERROR
MB_ICONQUESTION的图标MB_ICONQUESTION
MB_ICONEXCLAMATION和MB_ICONWARNING的图标MB_ICONEXCLAMATIONMB_ICONWARNING
MB_ICONASTERISK和MB_ICONINFORMATION的图标MB_ICONASTERISKMB_ICONINFORMATION

 

在MessageBox显示字符串的开头添加由Unicode格式化字符U + 200F表示的两个从右到左标记(RLM),由MessageBox呈现引擎解释,以便将MessageBox的读取顺序呈现为从右到左(RTL)。

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

如果在存在对话框时创建消息框,请使用对话框的句柄作为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;
}

下图显示了上述代码示例的输出:

消息框

 

 

 

 

 

 

 

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐