2009-05-04 22 views
5

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

どうすればよいですか?カスタムボタンを簡単に追加するための滑らかなハックはありますか?または、独自のMessageBox置換を作成する必要がありますか?

+3

ええと、ボタンを作成して "Yes To All"というキャプションを付けますか?私はあなたがもう少し具体的である必要があると思う。 –

+0

WinAPIのMessageBoxは、自分のボタンを作成してカスタムのキャプションを与えることはできません。それが私が試みた最初のことでした。 – Brown

+1

MessageBox()をカスタマイズすることができます。 SetWindowsHookEx()を使用して、MessageBox()を呼び出す直前にスレッド固有のCBTフックをインストールします。フックがトリガされると、ダイアログのHWNDにアクセスできます。子コントロールを追加したり、コントロールを移動したり、テキストを変更したりできます。 –

答えて

2

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

それはあなたが、その場合のデフォルトのオプションがある指定することによって、再びそれを表示しない場合はオプションでMessageBoxMB_OKCANCEL/MB_YESNO/MB_OK標準を表示することができます。

おそらく、あなたが探しているものではないかもしれませんが、WindowsのUIとかなり一致しています。

Vistaでは、ほとんどのシェルの「はい」が実際にこのように動作します。「はい/いいえ全員」というボタンはありません。代わりに「すべての項目に対して選択した処理を実行する」チェックボックスがあります。

しかしマニュアルの注意は私を心配:

この機能は、Microsoft Windows XPおよびWindows Server 2003によってそれが変更される可能性がありますまたはWindowsのそれ以降のバージョンでは利用できない可能です。

2

あなたはまたMessageBoxと、それは似て作るためにテキストの折り返しの世話をする必要があるかもしれません。また、MessageBoxは、デフォルトのGUIフォントとは異なるフォントを使用します。ダイアログがポップアップしたときにサウンドを再生することを忘れないでください:)

関連する問題