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