带有自己的button文本的消息框

Windows上的许多应用程序只是用“是”/“否”或“确定”/“取消”button显示简单的消息框。 在非英文版的Windows中,文本通常会变得更糟,文本是英文的,但button却是用Windows的语言标记的。

是否没有简单的API来显示带有自己的button标签的消息框,例如“删除”或“保持”?

就像DavidHeffernan所说,你应该使用TaskDialogIndirect() ,因为它本身支持自定义按钮。 但只有Vista和更高版本才可用。

在XP和更早版本中,您可以使用SetWindowsHookEx()来安装线程本地WH_CBT挂钩或使用SetWinEventHook()来获取对话框中的标准MessageBox() (或者真的,任何您想要的自定义MessageBox()上的按钮标题HWND创建时,你可以操纵对话框,但是你想要的。 您可以使用GetDlgItem()获取各个按钮的HWND (因此可以使用标准的API函数/消息),和/或使用GetDlgItemText()更改它们的标题。 每个按钮的CtrlID与MessageBox()在单击该按钮时返回的值相同。

确实有这样一个Win32函数。 这是TaskDialogIndirect 。 请注意,它是在Vista中引入的,所以如果您仍然试图支持XP,那么您需要为该平台提供回退选项。

Codeproject这个项目提供了一个相当不错的替代MessageBox ,允许替换其他功能中的按钮标签。

它基本上是一个重写的MessageBox函数,它是标准Windows MessageBox函数的超集。 提供完整的源代码,以便您根据需要轻松地适应您的需求。

而且它是纯粹的Win32,这里没有介入MFC。