MessageBoxの[再試行]ボタンを無効にしてから有効にするにはどうすればよいですか?
質問
次のアンマネージC ++コードがあります:
MessageBox( NULL, strMessage, "Cool Product", MB_RETRYCANCEL | MB_ICONEXCLAMATION);
(たとえば)10秒間[再試行]ボタンを無効にしてから有効にします。
これを行うにはどうすればよいですか
解決
@ffpf は、MFC、ATL、生のWin32などを使用して、これを行うには独自のダイアログを作成する必要があると言います。
次に、ボタンを有効または無効にするタイマーを作成します。
他のヒント
MessageBoxコントロールを直接操作することはできませんが、ハックを使用することはできます。ダイアログを表示する直前にWH _
CBTフックをインストールし、HCBT _
ACTIVATEイベントを処理します。これにより、メッセージボックスのHWNDが得られるので、メッセージボックスで何でもできます(サブクラス化、ボタンの管理、タイマーの設定)。
James Brownのサイトでデモコードを使用したカスタムメッセージボックスチュートリアルを見つけることができます。
標準のMessageBox呼び出しでは、できません。これを行うには、独自のMessageBoxを実装する必要があります。
これは、標準のメッセージボックス呼び出しで可能だとは思わない。
おそらく、この機能を含む独自のメッセージボックスを作成した方がよいでしょう。
(または、メッセージボックスが表示されるのを待っている画面を継続的に監視する別のスレッドを作成して、再試行ボタンを無効にし、10秒待ってから再度有効にすることができます。 / p>
Vista以降では、単純なメッセージボックスよりも洗練されたダイアログであるtaskdialogを使用できます。詳細とリンクこちら。
私はefotinisに同意します。それは不可能ではありません。HWNDを取得したら、それで何でもできます。 「本当にハックが必要なのか、それとも独自のメッセージボックスダイアログを作成するほうがいいのか」という問題です。
HWNDを見つけるのにそれほど良くない別の方法(明らかにメッセージボックス内のeveythingにアクセスできる)は、スレッドを開始し、EnumChildWindowsを使用してメッセージボックスハンドルを定期的にポーリングすることです。しかし、個人的にはWH_CBTフックも好みます。