- ベストアンサー
C++での連続した左クリックの禁止の仕方について
- VC++2005のWin32プロジェクトでアプリケーションを作成し、連続した左クリックを禁止する方法を探しています。
- EnableWindow関数を使って連続した左クリックを禁止しようとしましたが、うまくいきませんでした。
- どなたか連続した左クリックを禁止する方法をご存知でしたら教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
タイマーとフラグ、あるいはタイマーとEnableWindowの組み合わせでできるんじゃないかな。 case WM_LBUTTONDOWN: if( flg ){ flg=FALSE; SetTimer(~); } break; case WM_TIEMR: KillTimer(~); flg=TRUE; break; とか。
その他の回答 (2)
- tsuduki123
- ベストアンサー率32% (21/65)
ああ、ごめんなさい。勘違いしていました。 クリックした1動作の中で数秒間無効にしたいということですね。 メッセージポンプはシリアルに処理されるので ここでがんばっても、このクリック時の動作が終わってしまえば、 次のクリックを処理できるようになってしまいます。 左クリックしたときの動作を別のスレッドで処理したり、 処理を自前で分割して擬似的に並列実行するようにしてあげないとフラグ制御とかしても無意味です。 あとは、 別のウィンドウでマウス操作をフックしてしまうとかも考えられるけれど 異常系で一切の操作ができなくなってしまいかねないのでやめておいた方がいいです。 クリックしたときの動作で何が数秒間も動いてるのかわからないので 対処方法はこのくらいしか思い浮かびません。 ちなみにですが、一般的にメッセージポンプを処理するときのレスポンスは一瞬で戻ってくるようにしてあげないと ユーザーからはフリーズしたように見えるので注意してください。
お礼
>メッセージポンプはシリアルに処理されるので >ここでがんばっても、このクリック時の動作が終わってしまえば、 >次のクリックを処理できるようになってしまいます。 なるほど!そうだったんですね。勉強になります! ありがとうございます。 ちなみにクリックした際ですが、2秒間ほど音声が流れるようにしています。
- tsuduki123
- ベストアンサー率32% (21/65)
単純にフラグ制御じゃだめなんですかね 何もしないでbreakしてしまえば無効化したのと同じはずだけど
お礼
御回答ありがとうございます。 すみません。具体的にはどのようなフラグ制御行えば良いでしょうか? まだまだ素人で細かいところのプログラミングがよくわかっていないので、教えていただけると幸いです。
お礼
ご回答ありがとうございます. SetTimer関数とWM_TIMERはすでに使用しているので,タイマ-とEnableWindowでちょっと試してみようと思います.