MessageBoxW函数(winuser.h)

it2023-06-20  81

MessageBoxW函数(winuser.h) 12/05/2018 7分钟阅读 显示一个模式对话框,其中包含一个系统图标,一组按钮以及一个简短的特定于应用程序的消息,例如状态或错误信息。该消息框返回一个整数值,该整数值指示用户单击了哪个按钮。

句法 C ++

复制 int MessageBoxW( HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType ); 参量 hWnd

类型:HWND

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

lpText

类型:LPCTSTR

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

lpCaption

类型:LPCTSTR

对话框标题。如果此参数为NULL,则默认标题为Error。

uType

类型:UINT

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

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

表格1 值 含义 MB_ABORTRETRYIGNORE 0x00000002L 该消息框包含三个按钮:中止,重试和忽略。 MB_CANCELTRYCONTINUE 0x00000006L 该消息框包含三个按钮:取消,重试,继续。使用此消息框类型代替MB_ABORTRETRYIGNORE。 MB_HELP 0x00004000L 将帮助按钮添加到消息框中。当用户单击“帮助”按钮或按F1时,系统会将WM_HELP消息发送给所有者。 MB_OK 0x00000000L 该消息框包含一个按钮:OK。这是默认值。 MB_OKCANCEL 0x00000001L 该消息框包含两个按钮:“确定”和“取消”。 MB_RETRYCANCEL 0x00000005L 该消息框包含两个按钮:重试和取消。 MB_YESNO 0x00000004L 该消息框包含两个按钮:是和否。 MB_YESNOCANCEL 0x00000003L 该消息框包含三个按钮:是,否和取消。

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

表2 值 含义 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 消息框中将出现一个停车标志图标。

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

表3 值 含义 MB_DEFBUTTON1 0x00000000L 第一个按钮是默认按钮。 除非指定了MB_DEFBUTTON2,MB_DEFBUTTON3或MB_DEFBUTTON4,否则MB_DEFBUTTON1是默认设置。

MB_DEFBUTTON2 0x00000100L 第二个按钮是默认按钮。 MB_DEFBUTTON3 0x00000200L 第三个按钮是默认按钮。 MB_DEFBUTTON4 0x00000300L 第四个按钮是默认按钮。

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

表4 值 含义 MB_APPLMODAL 0x00000000L 用户必须先对消息框做出响应,然后才能在hWnd参数标识的窗口中继续工作。但是,用户可以移至其他线程的窗口并在这些窗口中工作。 根据应用程序中窗口的层次结构,用户可能能够移动到线程内的其他窗口。消息框的父级的所有子窗口都将自动禁用,但弹出窗口不会被禁用。

如果未指定MB_SYSTEMMODAL和MB_TASKMODAL,则MB_APPLMODAL是默认设置。

MB_SYSTEMMODAL 0x00001000L 除了消息框具有WS_EX_TOPMOST样式外,与MB_APPLMODAL相同。使用系统模式消息框通知用户需要立即引起注意的严重,潜在破坏性错误(例如,内存不足)。除了与hWnd关联的窗口之外,此标志对用户与窗口交互的能力没有影响。 MB_TASKMODAL 0x00002000L 与MB_APPLMODAL相同,不同之处在于,如果hWnd参数为NULL,则禁用属于当前线程的所有顶级窗口。当调用的应用程序或库没有可用的窗口句柄,但仍需要在不暂停其他线程的情况下阻止输入到调用线程中的其他窗口时,请使用此标志。

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

表5 值 含义 MB_DEFAULT_DESKTOP_ONLY 0x00020000L 与交互式Window Station的桌面相同。有关更多信息,请参见窗口站。 如果当前输入的桌面不是默认桌面,则在用户切换到默认桌面之前,MessageBox不会返回。

MB_RIGHT 0x00080000L 文本右对齐。 MB_RTLREADING 0x00100000L 在希伯来语和阿拉伯语系统上,使用从右到左的阅读顺序显示消息和标题文本。 MB_SETFOREGROUND 0x00010000升 该消息框将成为前台窗口。在内部,系统为消息框调用SetForegroundWindow函数。 MB_TOPMOST 0x00040000L 消息框是使用WS_EX_TOPMOST窗口样式创建的。 MB_SERVICE_NOTIFICATION 0x00200000L 呼叫者是向用户通知事件的服务。即使没有用户登录到计算机,此功能也会在当前活动的桌面上显示一个消息框。 终端服务:如果调用线程具有模拟令牌,则该函数会将消息框定向到模拟令牌中指定的会话。

如果设置了此标志,则hWnd参数必须为NULL。这样,消息框可以显示在与hWnd对应的桌面之外的其他桌面上。

有关使用此标志的安全注意事项的信息,请参阅Interactive Services。特别是,请注意,此标志可以在锁定的桌面上产生交互式内容,因此应仅用于非常有限的一组场景,例如资源耗尽。

返回值 类型:int

如果一个消息框有一个取消按钮,则该函数返回IDCANCEL如果或者ESC键被按下或值取消按钮被选择。如果消息框没有“取消”按钮,则按ESC无效-除非存在MB_OK按钮。如果显示MB_OK按钮,并且用户按ESC,则返回值为IDOK。

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

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

返回值 返回码/值 描述 IDABORT 3 的中止按钮被选中。 IDCANCEL 2 在取消按钮被选中。 ID继续 11 该继续按钮被选中。 身份识别 5 在忽略按钮被选中。 证件号码 7 在没有按钮被选中。 IDOK 1个 在OK按钮被选中。 IDRETRY 4 的重试按钮被选中。 IDTRYAGAIN 10 选择了重试按钮。 IDYES 6 该是按钮被选中。 备注 通过将uType参数设置为相应的标志值,可以在消息框中使用以下系统图标。

备注 图标 标志值 MB_ICONHAND,MB_ICONSTOP和MB_ICONERROR的图标 MB_ICONHAND,MB_ICONSTOP或MB_ICONERROR MB_ICONQUESTION的图标 MB_ICONQUESTION MB_ICONEXCLAMATION和MB_ICONWARNING的图标 MB_ICONEXCLAMATION或MB_ICONWARNING MB_ICONASTERISK和MB_ICONINFORMATION的图标 MB_ICONASTERISK或MB_ICONINFORMATION

MessageBox呈现引擎解释在MessageBox显示字符串的开头添加两个以Unicode格式字符U + 200F表示的从右到左标记(RLM),以使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;

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

留言框 有关另一个消息框示例,请参阅显示消息框。

注意

winuser.h标头将MessageBox定义为别名,别名将根据UNICODE预处理器常量的定义自动选择此函数的ANSI或Unicode版本。不使用编码中性别名与不使用编码中性的代码混合使用会导致不匹配,从而导致编译或运行时错误。有关更多信息,请参见函数原型约定。

要求 要求

最低支持的客户 Windows 2000 Professional [仅限桌面应用程序] 最低支持的服务器 Windows 2000 Server [仅桌面应用程序] 目标平台 视窗 标头 winuser.h(包括Windows.h) 图书馆 User32.lib 动态链接库 User32.dll

最新回复(0)