5

WinAPIを使用するCで記述されたレガシーアプリケーションがあります。いくつかのダイアログボックスに「すべてはい」ボタンを追加したいと思います。残念ながら、既存のMessageBox関数では、カスタムボタンやボタンキャプションを使用できません。

そうするための最良の方法は何ですか?カスタムボタンを簡単に追加するための巧妙なハックはありますか?または、独自のMessageBox置換を作成する必要がありますか?

4

4 に答える 4

2

多分そのような何か? http://www.codeproject.com/KB/dialog/CRHYesNoToAllDialog.aspx

またはこれ: .NETでWindowsフックを使用してMessageBoxを拡張する

マーク

于 2009-05-04T16:05:33.107 に答える
2

Windows 2000以降、WinAPIには別の種類のメッセージボックスがあります。それはSHMessageBoxCheckです。

その場合のデフォルトオプションを指定することにより、標準の//MB_OKCANCELタイプを表示することができます。MB_YESNOMB_OKMessageBox

多分それはあなたが探しているものと正確には一致しませんが、それはWindowsUIとかなり一貫しています。

Vistaでは、シェルの「すべてにはい」ダイアログのほとんどが実際にこのように機能します。「すべてにはい/いいえ」という追加のボタンはありません。代わりに、「すべてのアイテムに対して選択したアクションを実行する」チェックボックスがあります。

しかし、ドキュメントのメモは私を心配しています:

この機能は、MicrosoftWindowsXPおよびWindowsServer2003で使用できます。以降のバージョンのWindowsでは、変更されているか、使用できない可能性があります。

于 2009-05-05T11:07:56.713 に答える
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 に答える