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