- 締切済み
2秒間のメッセージウィンドウ
よろしくおねがいします。 SDKで、メッセージボックスを2秒間ほど表示の後、自動的に消去し、 次の処理に移りたいのですが、MessageBox とかで実現しようとすると、 自分で、OKボタンやら、キャンセルやらを押さなくてはなりません。 どのようにすると可能でしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ag1
- ベストアンサー率66% (2/3)
アスキー出版局から 「ワンポイント・レッスン 最新Winodowsプログラミングテクニック」 という本が出ています。 MSJの記事をまとめたもので、9000円もする電話帳よりも分厚い本ですが、 その中に 「メッセージボックスに応答が無い場合、自動的に閉じてスレッドの実行を継続させるには」 というそのもののQ&Aがあります。 要約するとタイマーコールバック関数を用意しておいて(SetTimer) それからメッセージボックスを出します(MessageBox)。 コールバックの処理(タイムアウト時に実行される)はメッセージボックスに対して EndDialogするだけです。 ここでどうやってメッセージボックスのHWNDを取得するのかと言うと この本ではGetActiveWindowを使ってます。 これが気持ち悪いようでしたら(私はあまり気持ちよくないです)、 EnumWindowsで列挙してタイトル文字列で探すとかしてください。 タイムアウトするメッセージボックスについてのアイデアはあちこちで見られる ようですが、大きく分けると 1.別スレッドでメッセージボックスを出す 2.メッセージボックスのリソースとメッセージハンドラを自前で用意する の2つのように思われます。私の知識不足かも知れませんが。 そんな中で若干気持ち悪いですが(私だけ?)これが一番シンプルです。
- ARC
- ベストアンサー率46% (643/1383)
メッセージボックスをサブクラス化して、ショートカットキーを送信するとか… このあたりについての知識はあまり持ち合わせていないので、詳しいことは書けませんが…
メッセージボックスと同じフォームを自分で組み、そこにタイマーオブジェクトを仕込むのが一番だと思います。
補足
さっそくの回答ありがとうございます。 つまり、リソースエディターでダイアログをつくる、という解釈でよろしい のでしょうか? やはり、それしかないのですね・・・ VCの『 あの 』余計なコードを発生させたくないので、あえてSDKで 取り組んでいる次第ですが、もっと手軽な方法をご存知の方がいましたら、 ぜひともお教え願いたいです。
補足
少なからず私にとっては貴重な情報です。 ありがとうございました。