5

我们有一个用 C 语言编写的使用 WinAPI 的遗留应用程序。我们想在我们的一些对话框中添加一个“全部是”按钮。不幸的是,现有的 MessageBox 函数不允许自定义按钮或按钮标题。

最好的方法是什么?是否有一个巧妙的技巧可以轻松添加自定义按钮?还是我们应该创建自己的 MessageBox 替代品?

4

4 回答 4

2

WinAPI 中还有另一种消息框,自 Windows 2000 以来。它是SHMessageBoxCheck.

它允许您显示标准MB_OKCANCEL/ MB_YESNO/MB_OK类型MessageBox,并通过指定在这种情况下的默认选项是不再显示它的选项。

也许它并不完全符合您的要求,但它与 Windows UI 相当一致。

在 Vista 中,大多数 shell 的“全部同意”对话框实际上都是这样工作的——没有额外的按钮说“全部同意/否”——而是有一个“对所有项目执行所选操作”复选框。

但是文档中的注释让我担心:

此功能可通过 Microsoft Windows XP 和 Windows Server 2003 使用。它可能会在 Windows 的后续版本中更改或不可用。

于 2009-05-05T11:07:56.713 回答
2

可能是这样的吗? http://www.codeproject.com/KB/dialog/CRHYesNoToAllDialog.aspx

或者这个: 使用 Windows Hooks to Enhance MessageBox in .NET

马克

于 2009-05-04T16:05:33.107 回答
2

您可能还需要处理文本换行以使其类似于MessageBox. MessageBox与默认的 GUI 字体相比,还使用不同的字体。并且不要忘记在对话框弹出时播放声音:)

于 2011-09-21T18:10:48.387 回答
1

我们刚刚创建了自己的 DIALOGEX 替换资源模板,然后简单地调用 DialogBox() 并检查返回值。

参考: http: //msdn.microsoft.com/library/ms644996 (v=VS.85).aspx#modal_box

于 2011-09-21T15:09:45.377 回答