CPPMessageBox v1.0






4.89/5 (49投票s)
扩展的 MessageBox 类

目录
- 引言
- PPMessageBox API 方法
- PPMessageBoxIndirect API 方法
- PPMSGBOXAREA_BK 结构
- PPMSGBOXPARAMS 结构
- CPPMessageBox 类
- 如何使用?
- 历史
- 版权和免责声明
- 联系作者
引言
另一个 MessageBox:CodeProject 网站提供了更多作为标准 MessageBox 扩展的解决方案。那么为什么还要再来一个呢?你可能会问。除非我自己的项目真正需要,否则我不会开发类。长期以来,我一直使用 Hans Dietrich 的 "XMessageBox - 一个逆向工程的 MessageBox()" 类。这是一个不错的类,我感谢他的工作。然而,所有事物都有终结。这个类已经不能满足我了。我希望有一个类可以让我控制消息文本和背景的颜色。我已经在我的类 CPPToolTip 和 CPPHtmlStatic 中开发并成功测试了一个用于绘制伪 HTML 的类。因此,绘制彩色文本的解决方案很容易找到。对于这个类的其他功能,我依赖于 CodeProject 上已有的类。非常感谢所有帮助我创建这个类的人,特别是那些在 CodeProject 上发表这些类的作者。
PPMessageBox
int PPMessageBox( HWND hwnd, LPCTSTR lpszMessage, LPCTSTR lpszCaption = NULL, DWORD dwStyle = MB_OK | MB_ICONEXCLAMATION, const PPMSGBOXPARAMS * pMsgBox = NULL );
参数
- hWnd- [in] 要创建的消息框的拥有者窗口的句柄。如果此参数为 - NULL,则消息框没有拥有者窗口。
- lpszText- [in] 指向包含要显示的消息的以 null 结尾的字符串的指针。 
- lpszCaption- [in] 指向包含对话框标题的以 null 结尾的字符串的指针。如果此参数为 - NULL,则使用默认标题 Error。
- dwStyle- [in] 指定对话框的内容和行为。此参数可以是以下标志组的组合。 
要指示消息框中显示的按钮,请指定以下值之一:
| 值 | 描述 | 
| MB_ABORTRETRYIGNORE | 消息框包含三个按钮:Abort、Retry 和 Ignore。 | 
| MB_CANCELTRYCONTINUE | 消息框包含三个按钮:Cancel、Try Again、Continue。 | 
| MB_CONTINUEABORT | 消息框包含两个按钮:Continue 和 Abort。 | 
| MB_HELP | 向消息框添加一个 Help 按钮。当用户点击 Help 按钮或按下 F1 时,系统会向拥有者发送 WM_HELP消息。 | 
| MB_IGNOREIGNOREALLCANCEL | 消息框包含三个按钮:Ignore、Ignore All、Cancel。 | 
| MB_NOTOALL | 向消息框添加一个“Not to All”按钮。此标志仅与 MB_YESNO、MB_YESNOCANCEL标志组合使用。 | 
| MB_OK | 消息框包含一个按钮:OK。这是默认值。 | 
| MB_OKCANCEL | 消息框包含两个按钮:OK 和 Cancel。 | 
| MB_RETRYCANCEL | 消息框包含两个按钮:Retry 和 Cancel。 | 
| MB_SKIPSKIPALLCANCEL | 消息框包含三个按钮:Skip、Skip All 和 Cancel。 | 
| MB_YESNO | 消息框包含两个按钮:Yes 和 No。 | 
| MB_YESNOCANCEL | 消息框包含三个按钮:Yes、No 和 Cancel。 | 
| MB_YESTOALL | 向消息框添加一个“Yes to All”按钮。此标志仅与 MB_YESNO、MB_YESNOCANCEL标志组合使用。 | 
要指示消息框中显示的复选框,请指定以下值之一:
| 值 | 描述 | 
| MB_CHECKBOX | 向消息框添加一个复选框。如果未指定 MB_CHECKBOXUNDERBUTTONS标志,则复选框将放置在消息框按钮上方。默认情况下,复选框的文本为“不再显示”。您可以通过PPMSGBOXPARAMS结构的lpszCheckBoxText成员更改此文本。 | 
| MB_CHECKBOXCHECKED | 复选框默认选中。此标志仅与 MB_CHECKBOX组合使用。 | 
| MB_CHECKBOXUNDERBUTTONS | 复选框将放置在消息框按钮下方。此标志仅与 MB_CHECKBOX组合使用。 | 
要在消息框中显示图标,请指定以下值之一。
| 值 | 描述 | 
| MB_ICONEXCLAMATION | 消息框中出现一个感叹号图标。 | 
| MB_ICONWARNING | 消息框中出现一个感叹号图标。 | 
| MB_ICONINFORMATION | 消息框中出现一个圆圈内包含小写字母 i 的图标。 | 
| MB_ICONASTERISK | 消息框中出现一个圆圈内包含小写字母 i 的图标。 | 
| MB_ICONQUESTION | 消息框中出现一个问号图标。 | 
| MB_ICONSTOP | 消息框中出现一个停车标志图标。 | 
| MB_ICONERROR | 消息框中出现一个停车标志图标。 | 
| MB_ICONHAND | 消息框中出现一个停车标志图标。 | 
要指示默认按钮,请指定以下值之一。
| 值 | 描述 | 
| MB_DEFBUTTON1 | 第一个按钮是默认按钮。 MB_DEFBUTTON1是默认值,除非指定了MB_DEFBUTTON2、MB_DEFBUTTON3、MB_DEFBUTTON4、MB_DEFBUTTON5或MB_DEFBUTTON6。 | 
| MB_DEFBUTTON2 | 第二个按钮是默认按钮。 | 
| MB_DEFBUTTON3 | 第三个按钮是默认按钮。 | 
| MB_DEFBUTTON4 | 第四个按钮是默认按钮。 | 
| MB_DEFBUTTON5 | 第五个按钮是默认按钮。 | 
| MB_DEFBUTTON6 | 第六个按钮是默认按钮。 | 
要指定其他选项,请使用以下一个或多个值:
| 值 | 描述 | 
| MB_NORESOURCE | 不要尝试从资源加载按钮字符串。(有关字符串资源 ID 号,请参阅 PPMessageBox.h。)如果使用此标志,按钮和复选框将使用英文字符串。如果未使用此标志, PPMessageBox()将首先尝试从字符串资源加载按钮和复选框的字符串,如果失败,则使用英文字符串。 | 
| MB_NOSOUND | 显示消息框时不要播放声音。 | 
| MB_RIGHT | 文本右对齐。 | 
| MB_SETFOREGROUND | 消息框成为前台窗口。在内部,系统为消息框调用 SetForegroundWindow函数。 | 
| MB_TOPMOST | 消息框以 WS_EX_TOPMOST窗口样式创建。 | 
- pMsgBox
指向 PPMSGBOXPARAMS 结构的指针,该结构包含用于显示消息框的信息。
返回值
如果消息框有 Cancel 按钮,如果按下 ESC 键或选中 Cancel 按钮,函数将返回 IDCANCEL 值。如果消息框没有 Cancel 按钮,按下 ESC 无效。如果内存不足无法创建消息框,则返回值为零。如果函数成功,则返回值为以下菜单项值之一:
| 值 | 描述 | 
| IDABORT | 选中 Abort 按钮。 | 
| IDCANCEL | 选中 Cancel 按钮。 | 
| IDCLOSE | 选中 Close 按钮。 | 
| IDCONTINUE | 选中 Continue 按钮。 | 
| IDCUSTOM1 | 选中 Custom 1 按钮。 | 
| IDCUSTOM2 | 选中 Custom 2 按钮。 | 
| IDCUSTOM3 | 选中 Custom 3 按钮。 | 
| IDCUSTOM4 | 选中 Custom 4 按钮。 | 
| IDIGNORE | 选中 Ignore 按钮。 | 
| IDIGNOREALL | 选中 Ignore All 按钮。 | 
| IDNO | 选中 No 按钮。 | 
| IDNOTOALL | 选中 No To All 按钮。 | 
| IDOK | 选中 OK 按钮。 | 
| IDRETRY | 选中 Retry 按钮。 | 
| IDSKIP | 选中 Skip 按钮。 | 
| IDSKIPALL | 选中 Skip All 按钮。 | 
| IDTRYAGAIN | 选中 Try Again 按钮。 | 
| IDYES | 选中 Yes 按钮。 | 
| IDYESTOALL | 选中 Yes To All 按钮。 | 
返回值可以包含以下标志的组合:
| 值 | 描述 | 
| MB_CHECKBOXCHECKED | 复选框已选中。 | 
| MB_TIMEOUT | 如果超时,则返回此值。 | 
备注
PPMessageBox 函数创建、显示并操作消息框。消息框包含应用程序定义的消息和标题,以及预定义图标和按钮的任意组合。
当您使用系统模态消息框指示系统内存不足时,PPMSGBOXPARAMS 结构的 lpszText 和 lpszCaption 成员指向的字符串不应从资源文件中获取,因为尝试加载资源可能会失败。
如果在对话框存在时创建消息框,请使用对话框的句柄作为 hWnd 参数。hWnd 参数不应标识子窗口,例如对话框中的控件。
PPMessageBoxIndirect
<CODE>int PPMessageBoxIndirect( const PPMSGBOXPARAMS * pMsgBox = NULL );
参数
- pMsgBox
指向 PPMSGBOXPARAMS 结构的指针,该结构包含用于显示消息框的信息。
返回值
如果消息框有 Cancel 按钮,如果按下 ESC 键或选中 Cancel 按钮,函数将返回 IDCANCEL 值。如果消息框没有 Cancel 按钮,按下 ESC 无效。如果内存不足无法创建消息框,则返回值为零。如果函数成功,则返回值为以下菜单项值之一:
| 值 | 描述 | 
| IDABORT | 选中 Abort 按钮。 | 
| IDCANCEL | 选中 Cancel 按钮。 | 
| IDCLOSE | 选中 Close 按钮。 | 
| IDCONTINUE | 选中 Continue 按钮。 | 
| IDCUSTOM1 | 选中 Custom 1 按钮。 | 
| IDCUSTOM2 | 选中 Custom 2 按钮。 | 
| IDCUSTOM3 | 选中 Custom 3 按钮。 | 
| IDCUSTOM4 | 选中 Custom 4 按钮。 | 
| IDIGNORE | 选中 Ignore 按钮。 | 
| IDIGNOREALL | 选中 Ignore All 按钮。 | 
| IDNO | 选中 No 按钮。 | 
| IDNOTOALL | 选中 No To All 按钮。 | 
| IDOK | 选中 OK 按钮。 | 
| IDRETRY | 选中 Retry 按钮。 | 
| IDSKIP | 选中 Skip 按钮。 | 
| IDSKIPALL | 选中 Skip All 按钮。 | 
| IDTRYAGAIN | 选中 Try Again 按钮。 | 
| IDYES | 选中 Yes 按钮。 | 
| IDYESTOALL | 选中 Yes To All 按钮。 | 
返回值可以包含以下标志的组合:
| 值 | 描述 | 
| MB_CHECKBOXCHECKED | 复选框已选中。 | 
| MB_TIMEOUT | 如果超时,则返回此值。 | 
备注
PPMessageBoxIndirect 函数创建、显示并操作消息框。消息框包含应用程序定义的消息文本和标题、任意图标以及预定义按钮的任意组合。
当您使用系统模态消息框指示系统内存不足时,PPMSGBOXPARAMS 结构的 lpszText 和 lpszCaption 成员指向的字符串不应从资源文件中获取,因为尝试加载资源可能会失败。
如果在对话框存在时创建消息框,请使用对话框的句柄作为 hWnd 参数。hWnd 参数不应标识子窗口,例如对话框中的控件。
PPMSGBOXAREA_BK 结构
PPMSGBOXAREA_BK 结构包含用于显示消息框的信息。PPMessageBox 和 PPMesssageBoxIndirect 函数使用此结构。
typedef struct PPMSGBOXAREA_BK { int nSepType; int nSepAlign; LPCTSTR lpszSepText; int nEffectBk; COLORREF crStartBk; COLORREF crMidBk; COLORREF crEndBk; } PPMSGBOXAREA_BK;
成员
- nSepType
区域分隔符的类型。指定以下值之一:
| 值 | 描述 | 
| PPMSGBOX_SEP_NONE | 未指定分隔符。这是默认值。 | 
| PPMSGBOX_SEP_ETCHED | 分隔符是一条蚀刻的水平线。 | 
| PPMSGBOX_SEP_BLACK | 分隔符是一条黑色的水平线。 | 
| PPMSGBOX_SEP_WHITE | 分隔符是一条白色的水平线。 | 
- lpszSepText
指向以 null 结尾的字符串或字符串资源标识符的指针,该字符串或标识符包含分隔符文本。如果此成员为 NULL,则不使用分隔符文本。
- nSepAlign
分隔符文本的对齐方式。指定以下值之一:
| 值 | 描述 | 
| PPMSGBOX_ALIGN_LEFT | 文本显示在消息框的左侧。这是默认值。 | 
| PPMSGBOX_ALIGN_RIGHT | 文本显示在消息框的右侧。 | 
| PPMSGBOX_ALIGN_CENTER | 文本显示在消息框的中心。 | 
- nEffectBk
填充消息框背景的效果。指定以下值之一:
| 值 | 描述 | 
| -1 | 透明。不填充区域。默认值。 | 
| CPPDrawManager::EFFECT_SOLID | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_HGRADIENT | 水平渐变填充。使用 crStartBk和crEndBk颜色值。 | 
| CPPDrawManager::EFFECT_VGRADIENT | 垂直渐变填充。使用 crStartBk和crEndBk颜色值。 | 
| CPPDrawManager::EFFECT_HCGRADIENT | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_VCGRADIENT | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_3HGRADIENT | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_3VGRADIENT | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_NOISE | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_DIAGSHADE | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_HSHADE | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_VSHADE | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_HBUMP | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_VBUMP | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_SOFTBUMP | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_HARDBUMP | 纯色填充。使用 crStartBk颜色值。 | 
| CPPDrawManager::EFFECT_METAL | 纯色填充。使用 crStartBk颜色值。 | 
PPMSGBOXPARAMS 结构
PPMSGBOXPARAMS 结构包含用于显示消息框的信息。PPMessageBox 和 PPMesssageBoxIndirect 函数使用此结构。
typedef struct PPMSGBOXPARAMS { //MessageBox area HWND hParentWnd; HINSTANCE hInstanceStrings; HINSTANCE hInstanceIcons; LPCTSTR lpszCaption; LPCTSTR lpszModuleName; LPCTSTR lpszCompanyName; int nLine; DWORD dwReportMsgID; PPMSGBOXAREA_BK pMsgBoxBk; //Header area int nHeaderHeight; LPCTSTR lpszHeaderText; PPMSGBOXAREA_BK pHeaderBk; //Message area LPCTSTR lpszText; //Control area int nControlsAlign; DWORD dwStyle; PPMSGBOXAREA_BK pControlBk; //MoreInfo area LPCTSTR lpszMoreInfo; PPMSGBOXAREA_BK pMoreInfoBk; int nTimeoutSeconds; int nDisabledSeconds; BOOL bDisableAllCtrls; DWORD dwContextHelpID; DWORD dwUserIconID; LPCTSTR lpszCustomButtons; LPCTSTR lpszCheckBoxText; mapLocalBtnText * pLocalBtnText; } PPMSGBOXPARAMS;
成员
- hParentWnd- 所有者窗口的句柄。此成员可以为 - NULL。
- hInstanceString- 包含由 - lpszText、- lpszCaption和其他字符串成员标识的字符串资源的模块的句柄。
- hInstanceIcons- 包含由 - lpszIcon成员标识的图标资源的模块的句柄。
- lpszCaption- 指向以 null 结尾的字符串的指针,该字符串包含消息框标题。如果此成员为 - NULL,则使用默认标题 Error。
- lpszModuleName- 指定应用程序的源模块名称。这可以是实际的源模块名称(例如,由 - __FILE__宏返回的名称)或对上下文有意义的名称(例如,“ConfirmFileDelete”)。这在将“不再询问/告知”复选框状态保存到注册表或 ini 文件时使用。- 由应用程序管理此注册表项。如果需要在每次应用程序启动时清除此项,应用程序必须包含执行此操作的代码。 - XMessageBox的所有键/值对都存储在注册表的 HKEY_CURRENT_USER\Software\CompanyName\AppName\PPMessageBox 下。如果使用 ini 文件,则复选框状态将保存到应用程序目录中的 PPMessageBox.ini 文件中。- 当显示消息框时,如果在 - XMSGBOXPARAMS- struct中指定了- lpszModule,则只有当注册表项不存在时才会显示消息框。如果显示消息框,并且用户选中“不再询问/告知”复选框,则复选框状态将保存到注册表中。
- lpszCompanyName- 指定应用程序的公司名称。这在将“不再询问/告知”复选框状态保存到注册表或 ini 文件时使用。 
- nLine- 指定应用程序的源模块行号。这在将“不再询问/告知”复选框状态保存到注册表时使用。请注意,无论 - lpszModule字符串是否编码,行号都不会编码。
- dwReportMsgID- 指定点击“报告”按钮时要发送的消息。 
- pMsgBoxBk- PPMSGBOXAREA_BK结构,包含用于显示所有消息框背景的信息。
- nHeaderHeight- 消息框标题的最小高度。 
- lpszHeaderText- 指向以 null 结尾的字符串或传递给 - MAKEINTRESOURCE宏的字符串资源标识符的指针,该字符串或标识符包含要显示的标题。此字符串可能具有类似 HTML 的格式。
- pHeaderBk- PPMSGBOXAREA_BK结构,包含用于显示消息框标题区域背景的信息。
- lpszText- 指向以 null 结尾的字符串或传递给 - MAKEINTRESOURCE宏的字符串资源标识符的指针,该字符串或标识符包含要显示的消息。此字符串可能具有类似 HTML 的格式。
- nControlsAlign- 一个值,指定消息框中按钮的水平对齐方式。此成员可以是以下值之一: - PPMSGBOX_ALIGN_LEFT、- PPMSGBOX_ALIGN_RIGHT或- PPMSGBOX_ALIGN_CENTER。
- dwStyle- 指定对话框的内容和行为。此成员可以是 - PPMessageBox函数的- dwStyle参数所描述的标志组合。- 此外,如果您希望消息框显示 - lpszIcon成员指定的图标,可以指定- MB_USERICON标志。
- pControlBk- PPMSGBOXAREA_BK结构,包含用于显示消息框控件区域背景的信息。
- lpszMoreInfo- 指向以 null 结尾的字符串或传递给 - MAKEINTRESOURCE宏的字符串资源标识符的指针,该字符串或标识符包含要显示的其他信息。此字符串可能具有类似 HTML 的格式。
- pMoreInfoBk- PPMSGBOXAREA_BK结构,包含用于显示消息框- MoreInfo区域背景的信息。
- nTimeoutSeconds- 指定在自动点击默认按钮之前的超时值(以秒为单位)。 
- nDisabledSeconds- 指定禁用默认按钮或禁用消息框所有按钮(不包括“帮助”、“报告”和“更多信息”按钮)的超时值(以秒为单位)。 
- bDisableAllCtrls- 标志,指示是禁用默认按钮 ( - FALSE) 还是禁用消息框的所有按钮 (- TRUE)。“帮助”、“报告”和“更多信息”按钮永远不会被禁用。
- dwContextHelpID- 标识帮助上下文。如果发生帮助事件,此值将在消息框发送给所有者窗口或回调函数的 - HELPINFO结构中指定。
- lpszIcon- 标识图标资源。此参数可以是以 null 结尾的字符串或传递给 - MAKEINTRESOURCE宏的整数资源标识符。- 要加载标准系统定义图标之一,请将 - hInstance成员设置为- NULL,并将- zIcon设置为- LoadIcon函数列出的值之一。- 如果 - dwStyle成员未指定- MBUSERICON标志,则忽略此成员。
- lpszCustomButtons- 指向以 null 结尾的字符串或传递给 - MAKEINTRESOURCE宏的字符串资源标识符的指针,该字符串或标识符包含自定义按钮标题列表。此字符串的格式为“Custom 1\nCustom 2\nCustom 3\nCustom 4”。如果未使用自定义按钮,则为- NULL。- 最多可以指定四个按钮。当点击自定义按钮时,它将返回 - IDCUSTOM1、- IDCUSTOM2等值。指定自定义按钮时,将不会显示其他按钮(“帮助”、“报告”和“更多信息”按钮除外。这些按钮可能无论如何都会显示)。
- lpszCheckBoxText- 指向以 null 结尾的字符串或传递给 - MAKEINTRESOURCE宏的字符串资源标识符的指针,该字符串或标识符包含复选框标题。您可以为每个消息框更改复选框标题。如果此参数为- NULL,则复选框标题将从- pLocalBtnText成员指定的映射或资源中检索。如果该参数也为- NULL,则复选框标题将默认为“不再显示”。
- pLocalBtnText- 指向包含指向以 null 结尾的字符串的映射的指针,或传递给 - MAKEINTRESOURCE宏的字符串资源标识符的指针,该字符串或标识符包含按钮标题。映射的键是按钮 ID(例如:- IDOK、- IDCANCEL、- IDYES、- MB_CHECKBOX等)。
CPPMessageBox 类
CPPMessageBox 类是 API PPMessageBox 和 PPMessageBoxIndirect 方法的 MFC 包装器。此类的目的是方便地处理消息框定制的庞大而复杂的 PPMSGBOXPARAMS 结构。为此,它包含一组方法:
| MessageBox | 显示消息框。 | 
| MessageBoxIndirect | 显示消息框。 | 
| GetMessageBoxParams | 接收用于显示消息框的信息。 | 
| SetMessageBoxParams | 设置用于显示消息框的信息。 | 
| SetTimeouts | 设置超时值以自动点击或禁用消息框按钮。 | 
| SetCustomButtons | 指定用于自定义按钮标题的字符串。 | 
| SetBackground | 设置填充消息框区域背景的效果。 | 
| SetSeparator | 设置消息框区域的分隔符。 | 
| ClearAllButtonsText | 清除所有按钮文本。 | 
| SetButtonText | 设置指定按钮的文本。 | 
| GetButtonText | 接收指定按钮的文本。 | 
CPPMessageBox::MessageBox
int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nStyle = MB_OK | MB_ICONEXCLAMATION, const PPMSGBOXPARAMS * pMsgBox = NULL);
参数
- lpszText- 指向以 null 结尾的字符串的指针,该字符串包含要显示的消息。
- lpszCaption- 指向以 null 结尾的字符串的指针,该字符串包含对话框标题。如果此参数为- NULL,则使用默认标题 Error。
- nStyle- 指定对话框的内容和行为。有关更多信息,请参阅- PPMessageBox方法。
- pMsgBox- 指向- PPMSGBOXPARAMS结构的指针,该结构包含用于显示消息框的信息。
返回值
如果消息框有 Cancel 按钮,如果按下 ESC 键或选中 Cancel 按钮,函数将返回 IDCANCEL 值。如果消息框没有 Cancel 按钮,按下 ESC 无效。
如果函数成功,有关返回值的更多信息,请参阅 PPMessageBox 方法。
如果内存不足无法创建消息框,则返回值为零。
备注
MessageBox 函数创建、显示并操作消息框。消息框包含应用程序定义的消息和标题,以及预定义图标和按钮的任意组合。有关更多信息,请参阅 PPMessageBox 方法。
CPPMessageBox::MessageBoxIndirect
int MessageBoxIndirect(const PPMSGBOXPARAMS * pMsgBox = NULL);
参数
- pMsgBox- 指向- PPMSGBOXPARAMS结构的指针,该结构包含用于显示消息框的信息。
返回值
如果消息框有 Cancel 按钮,如果按下 ESC 键或选中 Cancel 按钮,函数将返回 IDCANCEL 值。如果消息框没有 Cancel 按钮,按下 ESC 无效。如果函数成功,有关返回值的更多信息,请参阅 PPMessageBox 方法。如果内存不足无法创建消息框,则返回值为零。
备注
MessageBox 函数创建、显示并操作消息框。消息框包含应用程序定义的消息和标题,以及预定义图标和按钮的任意组合。有关更多信息,请参阅 PPMessageBoxIndirect 方法。
CPPMessageBox::GetMessageBoxParams
PPMSGBOXPARAMS * GetMessageBoxParams();
返回值
- pMsgBoxParams- 指向- PPMSGBOXPARAMS结构的指针,该结构接收用于显示消息框的信息。
备注
此方法接收用于显示消息框的信息。
CPPMessageBox::SetMessageBoxParams
void SetMessageBoxParams(const PPMSGBOXPARAMS * pMsgBoxParams);
参数
- pMsgBoxParams- 指向- PPMSGBOXPARAMS结构的指针,该结构包含用于显示消息框的信息。
备注
设置用于显示消息框的信息。
CPPMessageBox::SetTimeouts
void SetTimeouts(int nAutoclick, int nDisable = 0, BOOL bGlobalDisable = FALSE);
参数
- nAutoclick- 指定自动点击默认按钮的超时值,以秒为单位。如果此参数是非零值,则默认按钮将在超时后被点击(忽略- nDisable和- bGlobalDisable参数)。
- nDisable- 指定禁用默认按钮或禁用消息框所有按钮的超时值,以秒为单位。此参数仅在- nAutoclick参数为零时有效。
- bGlobalDisable-- TRUE表示禁用消息框的所有按钮;否则只禁用默认按钮。
备注
设置超时值以自动点击或禁用消息框按钮。有关更多信息,请参阅下表:
| 参数 | 操作 | ||
| nAutoclick | nDisable | bGlobalDisable | |
| 0 | 0 | FALSE | 无任何超时 | 
| 自动点击默认按钮的超时值 | x | x | 自动点击默认按钮 | 
| 0 | 禁用默认按钮的超时值 | FALSE | 禁用默认按钮 | 
| 0 | 禁用所有按钮的超时值 | TRUE | 禁用所有按钮 | 
CPPMessageBox::SetCustomButtons
void SetCustomButtons(LPCTSTR lpszButtonNames = NULL);
参数
- lpszButtonNames- 指向以 null 结尾的字符串或传递给- MAKEINTRESOURCE宏的字符串资源标识符的指针,该字符串或标识符包含自定义按钮标题列表。
备注
指定用于自定义按钮标题的字符串。此字符串的格式为“Custom 1\nCustom 2\nCustom 3\nCustom 4”。如果未使用自定义按钮,则为 NULL。最多可以指定四个按钮。当点击自定义按钮时,它将返回 IDCUSTOM1、IDCUSTOM2 等值。指定自定义按钮时,将不会显示其他按钮(“帮助”、“报告”和“更多信息”按钮除外。这些按钮始终可以显示)。
CPPMessageBox::SetBackground
void SetBackground(DWORD dwArea, PPMSGBOXAREA_BK * pAreaBk); void SetBackground(DWORD dwArea, int nEffectBk = -1, COLORREF crStartBk = -1, COLORREF crEndBk = -1, COLORREF crMidBk = -1);
参数
- dwArea- 填充背景的消息框区域。指定以下值之一:- PPMSGBOX_HEADER_AREA、- PPMSGBOX_MESSAGE_AREA、- PPMSGBOX_CONTROL_AREA、- PPMSGBOX_MOREINFO_AREA。
- pAreaBk- 指向- PPMSGBOXAREA_BK结构的指针,该结构包含用于填充消息框区域的信息。如果区域未填充,则为- NULL。
- nEffectBk- 填充消息框区域背景的效果。如果区域未填充,则为 -1。
- crStartBk、- crEndBk、- crMidBk- 填充背景的- COLORREF值。-1 为- COLOR_3DFACE。
备注
此方法设置填充消息框区域背景的效果。
CPPMessageBox::SetSeparator
void SetSeparator(DWORD dwArea, int nSepType = PPMSGBOX_SEP_NONE, int nSepAlign = PPMSGBOX_ALIGN_LEFT, LPCTSTR lpszSepText = NULL);
参数
- dwArea- 消息框中填充背景的区域,指定以下值之一:- PPMSGBOX_HEADER_AREA、- PPMSGBOX_CONTROL_AREA、- PPMSGBOX_MOREINFO_AREA。
- nSepType- 分隔符的类型,指定以下值之一:- PPMSGBOX_SEP_NONE、- PPMSGBOX_SEP_ETCHED、- PPMSGBOX_SEP_BLACK、- PPMSGBOX_SEP_WHITE。
- nSepAlign- 分隔符文本的对齐方式,指定以下值之一:- PPMSGBOX_ALIGN_LEFT、- PPMSGBOX_ALIGN_RIGHT、- PPMSGBOX_ALIGN_CENTER。
- lpszSepText- 指向以 null 结尾的字符串或字符串资源标识符的指针,该字符串或标识符包含分隔符文本。如果此成员为- NULL,则不使用分隔符文本。
备注
此方法绘制消息框区域的分隔符。有关更多信息,请参阅 PPMSGBOXAREA_BK 结构。
CPPMessageBox::ClearAllButtonsText
void ClearAllButtonsText(); 
备注
此方法清除所有按钮文本。
CPPMessageBox::SetButtonText
void SetButtonText(DWORD dwBtnID, LPCTSTR lpszText = NULL);
参数
- dwBtnID- 按钮标识符。指定以下值之一:值描述- IDABORT- 中止按钮。 - IDCANCEL- 取消按钮。 - IDCLOSE- 关闭按钮。 - IDCONTINUE- 继续按钮。 - IDIGNORE- 忽略按钮。 - IDIGNOREALL- 全部忽略按钮。 - IDNO- 否按钮。 - IDNOTOALL- 全部否按钮。 - IDOK- 确定按钮。 - IDRETRY- 重试按钮。 - IDSKIP- 跳过按钮。 - IDSKIPALL- 全部跳过按钮。 - IDTRYAGAIN- 再试一次按钮。 - IDYES- 是按钮。 - IDYESTOALL- 全部是按钮。 - MB_CHECKBOX- 复选框按钮。 
- lpszText- 指向以 null 结尾的字符串或字符串资源标识符的指针,该字符串或标识符包含指定按钮的文本。如果此成员为- NULL,则使用默认文本。
备注
此方法设置指定按钮的文本。如果按钮没有文本,则将从资源加载文本或使用默认文本。
CPPMessageBox::GetButtonText
LPCTSTR GetButtonText(DWORD dwBtnID);
参数
- dwBtnID- 按钮标识符。有关可用值的列表,请参阅- SetButtonText方法。
返回值
指向以 null 结尾的字符串的指针,该字符串包含指定按钮的文本。如果指定按钮的文本不可用,则为 NULL。
备注
此方法接收指定按钮的文本。
如何使用?
要将 PPMessageBox 集成到您的应用程序中,您应该将以下文件添加到您的项目:
- PPMessageBox.h
- PPMessageBox.cpp
- PPHtmlDrawer.h
- PPHtmlDrawer.cpp
- PPDrawManager.h
- PPDrawManager.cpp
- CeXDib.h, CeXDib.cpp - 感谢 Davide Pizzolato 和 Davide Calabro。此类别用于扩展背景效果。
- PPMessageBoxClass.h, PPMessageBoxClass.cpp - 一个包装类,用于 MFC 或 WTL 应用程序中的 PPMessageBox和PPMessageBoxIndirectAPI 方法。
使用 API 方法
在您想要调用 PPMessageBox() 方法的头文件中包含头文件 PPMessageBox.h。
用作 MFC 类或 WTL 类
在您想要使用 CPPMessageBox() 类的头文件中包含头文件 PPMessageBoxClass.h 并创建一个成员变量。
CPPMessageBox m_pMsgBox;
您可以使用 OnCreate()、OnInitDialog() 和任何其他方法进行自定义或显示消息框。
历史
- 2005年2月14日首次发布 
版权和免责声明
本软件及随附文件“按原样”分发,不提供任何明示或暗示的保证。对于可能造成的损害甚至功能性不承担任何责任。用户必须承担使用本软件的全部风险。
本软件可免费用于个人使用或免费软件应用程序。如果您想感谢我的工作,您可以向我捐赠任何金额的资金,以支持本类的开发。如果您在商业或共享软件应用程序中使用本软件,我们恳请您向作者捐赠任何金额的资金。
联系作者
鼓励您在任何地方使用此类别;CPPMessageBox 不需要任何费用。随意添加修改和/或修复错误,但请将其中任何内容发送给我!


