我们有一个用 C 语言编写的使用 WinAPI 的遗留应用程序。我们想在我们的一些对话框中添加一个“全部是”按钮。不幸的是,现有的 MessageBox 函数不允许自定义按钮或按钮标题。
最好的方法是什么?是否有一个巧妙的技巧可以轻松添加自定义按钮?还是我们应该创建自己的 MessageBox 替代品?
WinAPI 中还有另一种消息框,自 Windows 2000 以来。它是SHMessageBoxCheck
.
它允许您显示标准MB_OKCANCEL
/ MB_YESNO
/MB_OK
类型MessageBox
,并通过指定在这种情况下的默认选项是不再显示它的选项。
也许它并不完全符合您的要求,但它与 Windows UI 相当一致。
在 Vista 中,大多数 shell 的“全部同意”对话框实际上都是这样工作的——没有额外的按钮说“全部同意/否”——而是有一个“对所有项目执行所选操作”复选框。
但是文档中的注释让我担心:
此功能可通过 Microsoft Windows XP 和 Windows Server 2003 使用。它可能会在 Windows 的后续版本中更改或不可用。
可能是这样的吗? http://www.codeproject.com/KB/dialog/CRHYesNoToAllDialog.aspx
或者这个: 使用 Windows Hooks to Enhance MessageBox in .NET
马克
您可能还需要处理文本换行以使其类似于MessageBox
. MessageBox
与默认的 GUI 字体相比,还使用不同的字体。并且不要忘记在对话框弹出时播放声音:)
我们刚刚创建了自己的 DIALOGEX 替换资源模板,然后简单地调用 DialogBox() 并检查返回值。
参考: http: //msdn.microsoft.com/library/ms644996 (v=VS.85).aspx#modal_box