我如何才能创建一个;“对所有人都是”;使用WinAPI的按钮?

我如何才能创建一个;“对所有人都是”;使用WinAPI的按钮?,winapi,dialog,Winapi,Dialog,我们有一个用C编写的使用WinAPI的遗留应用程序。我们想在一些对话框中添加一个“全部是”按钮。不幸的是,现有的MessageBox函数不允许自定义按钮或按钮标题 最好的方法是什么?是否有一种巧妙的方法可以轻松添加自定义按钮?或者我们应该创建自己的MessageBox替代品吗?也许是类似的东西 或者这个: Marc自Windows 2000以来,WinAPI中还有另一种消息框。是的 它允许您显示标准的MB_OK cancel/MB_YESNO/MB_OK-键入MessageBox,并指定在这种情

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


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

也许是类似的东西

或者这个:


Marc

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

它允许您显示标准的
MB_OK cancel
/
MB_YESNO
/
MB_OK
-键入
MessageBox
,并指定在这种情况下的默认选项为“不再显示”

也许它并不完全是你想要的,但它与WindowsUI相当一致

在Vista中,大多数shell的“Yes to all”对话框实际上是这样工作的——没有额外的按钮说“Yes/no to all”——而是有一个“对所有项目执行所选操作”复选框

然而,文档中的注释让我担心:

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


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


参考资料:

您可能还需要注意文本包装,使其类似于
MessageBox
。此外,
MessageBox
使用的字体与默认GUI字体不同。当对话框弹出时,别忘了播放声音:)

嗯,创建一个按钮,并给它标题“Yes to All”?我认为您需要更具体一点。WinAPI中的MessageBox显然不允许创建自己的按钮并为它们提供自定义标题。这将是我尝试的第一件事。您可以自定义MessageBox()。在调用MessageBox()之前,使用SetWindowsHookEx()安装特定于线程的CBT钩子。当钩子被触发时,您将有权访问对话框的HWND,并且可以对其执行任何操作(添加其他子控件、移动控件、更改文本等)。