
C++での連続した左クリックの禁止の仕方について
VC++2005のWin32プロジェクトでアプリケーションを作成使用と思いプログラムを組んでいるのですが,連続した左クリックを禁止する方法について色々試してみたのですが,解決出来ず、今回質問するに至りました。
ちなみにダブルクリック処理をつけず,あくまでも『連続した左クリック』を禁止する方法を探しております。
EnableWindow関数を使って連続した左クリックを禁止しようとしたのですが....
↓ソースの一部
switch (message){
//略
case WM_LBUTTONDOWN:
EnableWindow(hWnd,FALSE);
//左クリックした時の動作(数秒間)を記述(内容は省略)
EnableWindow(hWnd,TRUE);
break;
左クリックをした時点で更なるクリックを不可状態にして、数秒間作業させた後,再びクリック可能状態に戻したいのですが,上記のようなプログラムで実行し,連続で左クリックしたところ,やはり連続で左クリックを禁止することができませんでした。
どなたか,連続した左クリックを禁止する方法をご存知でしたらご教授お願いします.
No.3ベストアンサー
- 回答日時:
タイマーとフラグ、あるいはタイマーとEnableWindowの組み合わせでできるんじゃないかな。
case WM_LBUTTONDOWN:
if( flg ){
flg=FALSE;
SetTimer(~);
}
break;
case WM_TIEMR:
KillTimer(~);
flg=TRUE;
break;
とか。
ご回答ありがとうございます.
SetTimer関数とWM_TIMERはすでに使用しているので,タイマ-とEnableWindowでちょっと試してみようと思います.
No.2
- 回答日時:
ああ、ごめんなさい。
勘違いしていました。クリックした1動作の中で数秒間無効にしたいということですね。
メッセージポンプはシリアルに処理されるので
ここでがんばっても、このクリック時の動作が終わってしまえば、
次のクリックを処理できるようになってしまいます。
左クリックしたときの動作を別のスレッドで処理したり、
処理を自前で分割して擬似的に並列実行するようにしてあげないとフラグ制御とかしても無意味です。
あとは、
別のウィンドウでマウス操作をフックしてしまうとかも考えられるけれど
異常系で一切の操作ができなくなってしまいかねないのでやめておいた方がいいです。
クリックしたときの動作で何が数秒間も動いてるのかわからないので
対処方法はこのくらいしか思い浮かびません。
ちなみにですが、一般的にメッセージポンプを処理するときのレスポンスは一瞬で戻ってくるようにしてあげないと
ユーザーからはフリーズしたように見えるので注意してください。
>メッセージポンプはシリアルに処理されるので
>ここでがんばっても、このクリック時の動作が終わってしまえば、
>次のクリックを処理できるようになってしまいます。
なるほど!そうだったんですね。勉強になります!
ありがとうございます。
ちなみにクリックした際ですが、2秒間ほど音声が流れるようにしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別フォームから戻ったときのイ...
-
「Cancel = True」とはどういう...
-
VBAでIEの「Web ページからのメ...
-
エクセルのシート上に別のシー...
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
Excelでワードアートや図を常に...
-
アコーディオンで開かれたパネ...
-
Outlookでこのような表示がされ...
-
小さな表示窓の呼び方は
-
[Java] Edgeでのアドレスバー非...
-
ウィンドウの2重起動を防止したい
-
一定時間おきにアラームやポッ...
-
VBAのユーザーフォームのframe...
-
リストビューをスクロールさせ...
-
Javascript_submit()完了後に処...
-
Excelで一部分だけを常に表示さ...
-
リストビューのスクロールバー...
-
子ウィンドウを常に手前表示、...
-
MFCでのスクロールバーの扱い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別フォームから戻ったときのイ...
-
「Cancel = True」とはどういう...
-
VB2005 DataGridView上でクリッ...
-
エクセル アプリケーションの...
-
実行時引数からの日付取得
-
別ページからのタブ切り替えの...
-
数が一定でない複数の条件の指...
-
【C#】ラベルのダブルクリック...
-
プログラムについて
-
CGIの負荷計測
-
テータベースのページ処理
-
FlashとCGIで診断テストを作りたい
-
なぜメールサーバは子プロセス(...
-
excelのタスクバーアイコンが・...
-
Perlで数値(小数点、負の数、...
-
Perlプログラムについてファイ...
-
実行中のOSを知るには?
-
perlを使いxmlの処理
-
排他制御のためのロックについて
-
Sleep関数の最大時間について
おすすめ情報