0

次のアンマネージ C++ コードがあります。

MessageBox( NULL, strMessage, "Cool Product", MB_RETRYCANCEL | MB_ICONEXCLAMATION);

RETRY ボタンを 10 秒間 (たとえば) 無効にしてから有効にしたい。

これどうやってするの?

4

6 に答える 6

1

@ffpf言うように、MFC、ATL、生の Win32 などを使用して、これを行うには独自のダイアログを作成する必要があります。

次に、ボタンを有効および無効にするタイマーを作成します。

于 2008-10-06T20:36:25.927 に答える
1

MessageBox コントロールを直接操作することはできませんが、ハックを使用できます。_ダイアログを表示する直前にWH CBT フックをインストールし、HCBT _ACTIVATE イベントを処理します。これにより、メッセージ ボックスの HWND が得られるので、それを使って好きなことを行うことができます (サブクラス化、ボタンの管理、タイマーの設定)。

James Brown のサイトで、デモ コードを含むカスタム メッセージ ボックスのチュートリアルを見つけることができます。

于 2008-10-06T20:54:25.550 に答える
0

私はefotinisに同意します.不可能ではありません.HWNDを手に入れたら、それを使って好きなことをすることができます. 「ハックが本当に必要なのか、それとも独自のメッセージボックスダイアログを作成するだけのほうがよいのか」という問題です。

HWND を見つけるもう 1 つのあまり良くない方法 (メッセージ ボックス内のすべてのものにアクセスできることは明らかです) は、スレッドを開始し、EnumChildWindows を使用してメッセージ ボックス ハンドルを周期的にポーリングすることです。しかし、個人的には WH_CBT フックも好みます。

于 2008-10-06T21:15:07.300 に答える
0

標準の MessageBox 呼び出しでは、できません。これを行うには、独自の MessageBox を実装する必要があります。

于 2008-10-06T20:33:55.027 に答える
0

標準のメッセージ ボックス呼び出しではこれが可能だとは思えません。

この機能を含む独自のメッセージ ボックスを作成する方がよいでしょう。

(または、メッセージ ボックスが表示されるのを待って画面を継続的に監視する別のスレッドを作成し、再試行ボタンを無効にし、10 秒待ってから再度有効にすることもできます。面白くありません。真剣に、別の方法を実行してください。)

于 2008-10-06T20:35:16.053 に答える
0

Vista 以降では、単純なメッセージ ボックスよりも洗練されたダイアログである taskdialog を使用できます。詳細とリンクはこちら.

于 2008-10-06T20:45:08.127 に答える