SHMessageBoxCheckA 函数 (shlwapi.h)

[SHMessageBoxCheck 可用于“要求”部分中指定的操作系统。 在后续版本中可能会更改或不可用。

显示一个消息框,该框为用户提供取消进一步出现的选项。 如果用户已选择取消消息框,该函数不会显示对话框,而是只返回默认值。

语法

int SHMessageBoxCheckA(
  [in, optional] HWND   hwnd,
  [in]           LPCSTR pszText,
  [in]           LPCSTR pszCaption,
                 UINT   uType,
                 int    iDefault,
  [in]           LPCSTR pszRegVal
);

参数

[in, optional] hwnd

类型:HWND

消息框所有者的窗口句柄。 此值可以 NULL

[in] pszText

类型:LPCTSTR

指向包含要显示的消息的以 null 结尾的字符串的指针。

[in] pszCaption

类型:LPCTSTR

指向包含消息框标题的以 null 结尾的字符串的指针。 如果此参数设置为 NULL,则游戏设置为 Error!

uType

类型:UINT

指定消息框的内容和行为的标志。 此函数仅支持 MessageBox支持的标志的子集。 如果使用下面未列出的任何标志,则函数的行为是未定义的。

必须通过设置一个和仅以下标志之一来指定要显示的按钮。

MB_OKCANCEL

显示一个消息框,其中 “确定”“取消”按钮。

MB_YESNO

显示一个消息框,其中 按钮。

MB_OK

显示一个消息框,其中包含“确定”按钮

可以通过设置以下一个标志和一个标志来显示可选图标。

MB_ICONHAND

显示停止标记图标。

MB_ICONQUESTION

显示问号图标。

MB_ICONEXCLAMATION

显示感叹号图标。

MB_ICONINFORMATION

在圆形中显示带小写“i”的图标。

iDefault

类型:int

当用户选择不再次显示消息框时,函数返回的值。 如果用户未选择取消消息框,则会显示消息框,并且函数将忽略 iDefault

[in] pszRegVal

类型:LPCTSTR

指向以 null 结尾的字符串的指针,其中包含要与此消息关联的唯一字符串值。 为了避免与Microsoft使用的值冲突,此字符串应包含 GUID。 此字符串的长度不得超过REGSTR_MAX_VALUE_LENGTH个字符,包括终止 null 字符。

返回值

类型:int

如果用户已选择取消消息框,该函数将立即返回分配给 iDefault的值。

如果用户单击“确定””取消“、”是“”否“按钮,则函数将分别返回 IDOK、IDCANCEL、IDYES 或 IDNO。

如果用户通过单击标题中的 X 按钮关闭消息框,该函数将返回 IDCANCEL。 即使尚未设置MB_OKCANCEL标志,也返回此值。

如果发生错误,则返回值通常为 –1。 但是,在某些低内存条件下,函数可能会返回 iDefault

言论

安全警告:如果函数返回 –1 或 iDefault,则不要采取任何危险操作。 如果尝试显示消息框时发生错误,SHMessageBoxCheck 返回 –1,在某些情况下 iDefault。 此类错误可能是内存不足或资源不足造成的。 如果获取其中一个返回值,则应注意用户不一定看到对话框,因此没有积极同意任何操作。

不要将“不显示此对话框”与“记住此答案”混淆。 SHMessageBoxCheck 不提供“记住此答案”功能。 如果用户再次选择取消消息框,该函数不会保留单击的按钮。 相反,后续调用 SHMessageBoxCheck 只需返回由 iDefault指定的值。 请考虑以下示例。


int iResult = SHMessageBoxCheck(hwnd, 
                                TEXT("Do you want to exit without saving?"),
                                TEXT("Warning"), 
                                MB_YESNO, 
                                IDNO,
                                TEXT("{d9108ba3-9a61-4398-bfbc-b02102c77e8a}");

如果用户选择 将来,请不要显示此 对话框,然后单击 按钮,SHMessageBoxCheck 返回 IDYES。 但是,下次执行此代码时,SHMessageBoxCheck 不会返回 IDYES,即使用户最初选择了“是”“是 也是如此。 相反,它返回 IDNO,因为这是 iDefault指定的值。

消息框显示的默认按钮应与 iDefault 值一致。 缺少对MB_DEFBUTTON2标志的支持意味着,如果指定了MB_OK或MB_OKCANCEL标志,则应将 iDefault 设置为 IDOK。 如果已设置MB_YESNO标志,则应将 iDefault 值设置为 IDYES。

SHMessageBoxCheck 记录用户选择在以下注册表项下禁止显示的消息框:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  DontShowMeThisDialogAgain

注意

shlwapi.h 标头将 SHMessageBoxCheck 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows XP [仅限桌面应用]
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 窗户
标头 shlwapi.h
DLL Shlwapi.dll (版本 5.0 或更高版本)