函数MessageBox产生、显示并运行一个消息框。消息框包含应用程序定义的消息及消息框标题,另外可以添加系统预定义的图标和按钮的组合。

int MessageBox(
  HWND hWnd,          // 消息框物主窗口的句柄
  LPCTSTR lpText,     // 消息框中显示的文本
  LPCTSTR lpCaption,  // 消息框标题中显示的文本
  UINT uType          // 消息框的类型
);

参数

hWnd
[in] 待创建消息框的物主窗口的句柄。如果该参数为NULL,则消息框没有物主窗口。
lpText
[in] 指向待显示消息的字符串(以'0'结尾)的指针。
lpCaption
[in] 指向消息框标题的字符串(以'0'结尾)的指针。如果该参数为NULL,则会使用缺省标题 错误
uType
[in] 指定消息框的内容和行为。该参数可以是从以下标志集中选择相应的标志进行的组合。

可以从下面的值中选择一个,以指定消息框中要显示的按钮。

含义
MB_ABORTRETRYIGNORE 消息框包含如下按钮:中止, 重试, 和忽略.
MB_CANCELTRYCONTINUE Windows 2000/XP: 消息框包含:取消, 重试, 继续。请使用此消息框类型而不是 MB_ABORTRETRYIGNORE.
MB_HELP Windows 95/98/Me, Windows NT 4.0 及以后版本: 为消息框添加 帮助 按钮。当用户点击 帮助 按钮或按下 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_DEFBUTTON2, MB_DEFBUTTON3, 或 MB_DEFBUTTON4,否则MB_DEFBUTTON1 就是缺省按钮。

MB_DEFBUTTON2 第二个按钮为缺省按钮。
MB_DEFBUTTON3 第三个按钮为缺省按钮。
MB_DEFBUTTON4 第四个按钮为缺省按钮。

从下面的值中选择一个,以指定消息框的形态。

含义
MB_APPLMODAL 在由参数hWnd 指定的窗口中继续工作之前,用户必须响应此消息框。但是,用户可以转到其它线程的窗口并工作。

取决于应用程序中窗口的层次,用户也许可以转到同一线程的其它窗口。消息框的父窗口中的所有子窗口都被自动禁止,但是弹出窗口除外。

除非MB_SYSTEMMODAL 或MB_TASKMODAL被指定,否则MB_APPLMODAL就是缺省值。

MB_SYSTEMMODAL 和 MB_APPLMODAL 相同,除非消息框是 WS_EX_TOPMOST 的样式。使用系统模态消息框通知用户紧急、有潜在危险的错误需要立即处理(例如,内存越界)。此标志对用户与非hWnd 相关联窗口的交互能力没有影响/效果。
MB_TASKMODAL 和MB_APPLMODAL相同,除非属于当前线程的所有顶级窗口处于禁止状态,在 hWnd 参数为NULL的情况下。当调用此函数的程序或者链接库没有有效窗口句柄,但依然需要在不暂停其它线程的情况下阻止调用线程的其它窗口的输入时,使用此标志。 +_+ ...

使用下面的值中的一个或多个,以指定其它选项。

含义
MB_DEFAULT_DESKTOP_ONLY Windows 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_NOTIFICATION Windows NT/2000/XP: 调用者服务通知用户一个事件。函数在当前活动桌面上显示一个消息框,即使计算机没有用户登录。

终端服务: 如果调用线程有一个模拟令牌,函数将消息框指向模拟令牌指定的会话。

如果设置此标志,hWnd 参数必须为NULL。所以,消息框可以出现在由hWnd响应的桌面以外的桌面上。

查看 Windows NT 3.51 和 Windows NT 4.0 版本之间更多的差异信息,参考 注意

MB_SERVICE_NOTIFICATION_NT3X Windows 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    按钮被按下。

 

如果消息框含有取消 按钮,当ESC键被按下或者取消按钮被按下时函数返回 IDCANCEL 值。如果消息框没有取消 按钮,按下ESC 键没有效果。

函数失败,返回值为0 。调用GetLastError可以获得扩展的错误信息。

注意

如果使用系统模态消息框通知用户内存容量不足,由lpTextlpCaption 指向的字符串不能是从资源文件中获得。因为加载资源文件的尝试可能会失败。

如果产生消息框时存在一个对话框,请使用此对话框的句柄作为消息框的 hWnd 参数。 hWnd 参数不应来自子窗口,例如对话框的一个控件。

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

Windows NT/2000/XP: MB_SERVICE_NOTIFICATION 值自Windows NT 4.0之后发生变化。在实现 MessageBox时,Windows NT 4.0 通过映射旧值到新值的方式对此前存在的服务提供后向兼容 。只有可执行文件的版本低于 4.0 时,此映射方式才被链接器作为设置使用。

为编译使用 MB_SERVICE_NOTIFICATIO 的服务,并且在 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各操作系统之间保持更多一致行为。你必须像 Microsoft Layer for Unicode on Windows 95/98/Me Systems指出的那样,在你的应用程序中添加一定的文件以达到此目的。

代码例程

查看Displaying a Message Box获得一个例程。

需要:

  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 支持。

查看更多

Dialog Boxes Overview, Dialog Box Functions, FlashWindow, MessageBeep, MessageBoxEx, MessageBoxIndirect, SetForegroundWindow

posted on 2013-05-25 18:41  TomJerryDavi  阅读(230)  评论(0编辑  收藏  举报