WinAPIを使用するCで記述されたレガシーアプリケーションがあります。いくつかのダイアログボックスに「すべてはい」ボタンを追加したいと思います。残念ながら、既存のMessageBox関数では、カスタムボタンやボタンキャプションを使用できません。
そうするための最良の方法は何ですか?カスタムボタンを簡単に追加するための巧妙なハックはありますか?または、独自のMessageBox置換を作成する必要がありますか?
多分そのような何か? http://www.codeproject.com/KB/dialog/CRHYesNoToAllDialog.aspx
またはこれ: .NETでWindowsフックを使用してMessageBoxを拡張する
マーク
Windows 2000以降、WinAPIには別の種類のメッセージボックスがあります。それはSHMessageBoxCheck
です。
その場合のデフォルトオプションを指定することにより、標準の//MB_OKCANCEL
タイプを表示することができます。MB_YESNO
MB_OK
MessageBox
多分それはあなたが探しているものと正確には一致しませんが、それはWindowsUIとかなり一貫しています。
Vistaでは、シェルの「すべてにはい」ダイアログのほとんどが実際にこのように機能します。「すべてにはい/いいえ」という追加のボタンはありません。代わりに、「すべてのアイテムに対して選択したアクションを実行する」チェックボックスがあります。
しかし、ドキュメントのメモは私を心配しています:
この機能は、MicrosoftWindowsXPおよびWindowsServer2003で使用できます。以降のバージョンのWindowsでは、変更されているか、使用できない可能性があります。
に似たものにするために、テキストの折り返しにも注意する必要がある場合がありますMessageBox
。またMessageBox
、デフォルトのGUIフォントとは異なるフォントを使用します。そして、ダイアログがポップアップしたときにサウンドを再生することを忘れないでください:)
独自のDIALOGEX置換リソーステンプレートの作成を終了し、DialogBox()を呼び出して戻り値を確認するだけです。
参照: http://msdn.microsoft.com/library/ms644996( v = VS.85).aspx#modal_box