プロが教える店舗&オフィスのセキュリティ対策術

C++での連続した左クリックの禁止の仕方について

VC++2005のWin32プロジェクトでアプリケーションを作成使用と思いプログラムを組んでいるのですが,連続した左クリックを禁止する方法について色々試してみたのですが,解決出来ず、今回質問するに至りました。

ちなみにダブルクリック処理をつけず,あくまでも『連続した左クリック』を禁止する方法を探しております。


EnableWindow関数を使って連続した左クリックを禁止しようとしたのですが....

↓ソースの一部

switch (message){
 
//略

case WM_LBUTTONDOWN:
 
EnableWindow(hWnd,FALSE);

//左クリックした時の動作(数秒間)を記述(内容は省略)

EnableWindow(hWnd,TRUE);

break;


左クリックをした時点で更なるクリックを不可状態にして、数秒間作業させた後,再びクリック可能状態に戻したいのですが,上記のようなプログラムで実行し,連続で左クリックしたところ,やはり連続で左クリックを禁止することができませんでした。

どなたか,連続した左クリックを禁止する方法をご存知でしたらご教授お願いします.

A 回答 (3件)

タイマーとフラグ、あるいはタイマーとEnableWindowの組み合わせでできるんじゃないかな。



case WM_LBUTTONDOWN:
  if( flg ){
flg=FALSE;
SetTimer(~);
}
break;
case WM_TIEMR:
KillTimer(~);
flg=TRUE;
break;

とか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます.

SetTimer関数とWM_TIMERはすでに使用しているので,タイマ-とEnableWindowでちょっと試してみようと思います.

お礼日時:2010/05/11 11:52

ああ、ごめんなさい。

勘違いしていました。
クリックした1動作の中で数秒間無効にしたいということですね。

メッセージポンプはシリアルに処理されるので
ここでがんばっても、このクリック時の動作が終わってしまえば、
次のクリックを処理できるようになってしまいます。
左クリックしたときの動作を別のスレッドで処理したり、
処理を自前で分割して擬似的に並列実行するようにしてあげないとフラグ制御とかしても無意味です。

あとは、
別のウィンドウでマウス操作をフックしてしまうとかも考えられるけれど
異常系で一切の操作ができなくなってしまいかねないのでやめておいた方がいいです。

クリックしたときの動作で何が数秒間も動いてるのかわからないので
対処方法はこのくらいしか思い浮かびません。
ちなみにですが、一般的にメッセージポンプを処理するときのレスポンスは一瞬で戻ってくるようにしてあげないと
ユーザーからはフリーズしたように見えるので注意してください。
    • good
    • 0
この回答へのお礼

>メッセージポンプはシリアルに処理されるので
>ここでがんばっても、このクリック時の動作が終わってしまえば、
>次のクリックを処理できるようになってしまいます。

なるほど!そうだったんですね。勉強になります!

ありがとうございます。

ちなみにクリックした際ですが、2秒間ほど音声が流れるようにしています。

お礼日時:2010/05/11 00:17

単純にフラグ制御じゃだめなんですかね


何もしないでbreakしてしまえば無効化したのと同じはずだけど
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。

すみません。具体的にはどのようなフラグ制御行えば良いでしょうか?
まだまだ素人で細かいところのプログラミングがよくわかっていないので、教えていただけると幸いです。

お礼日時:2010/05/10 22:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!