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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 必ずyou bet と表示されます 2 2023/07/28 22:19
- マウス・キーボード マウスがおかしい 7 2022/07/28 09:04
- Windows 10 (緊急)windowsのタスクバーやアプリ?が反応しない 3 2023/03/28 05:03
- Windows 10 検索ナショナルパンダデー 2 2023/03/16 19:31
- HTML・CSS トリミングで表示した画像をクリックで元どおりにしたい 3 2022/12/16 18:49
- その他(Microsoft Office) Microsoft Edgeの「関心のあるカテゴリ」を表示させるには。 1 2023/03/16 18:05
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- その他(コンピューター・テクノロジー) HOI4のクリックがバグった 2 2023/04/29 17:51
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- ノートパソコン windows11フォトビューア 4 2023/07/07 18:35
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別フォームから戻ったときのイ...
-
「Cancel = True」とはどういう...
-
VBAでIEの「Web ページからのメ...
-
左シングルクリックと左ダブル...
-
VB2005 DataGridView上でクリッ...
-
マイページはどこを開くの
-
デジタル時計の時刻合わせの方...
-
ウインドウを毎回同じ位置、大...
-
エクセルのシート上に別のシー...
-
VBAのユーザーフォームのframe...
-
Javascript_submit()完了後に処...
-
VBAで任意のウインドウのサイズ...
-
小さな表示窓の呼び方は
-
Excelでワードアートや図を常に...
-
バッチファイルでdiskpart.exe...
-
PDFファイルの向きを縦から横に...
-
【Android】ユーザー補助機能ボ...
-
PDFを(htmlのように)無限に縦...
-
Photoshop 7 画像に上の青い境...
-
Windowsのポップアップの表示方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「Cancel = True」とはどういう...
-
別フォームから戻ったときのイ...
-
VB2005 DataGridView上でクリッ...
-
excelのタスクバーアイコンが・...
-
Perlで数値(小数点、負の数、...
-
VB6.0のEnabledをfalseにしても...
-
VBAでIEの「Web ページからのメ...
-
エクセル アプリケーションの...
-
【ImageMagick】 PDF → JPG 変...
-
【C#】ラベルのダブルクリック...
-
Perlでページ処理がどうしても...
-
vba IE操作で こういう事って...
-
別ページからのタブ切り替えの...
-
処理終了後のに砂時計が、クリ...
-
数千行HTML 画面表示の性能改善
-
javascriptの中で、perlのコマ...
-
C# マウスオーバーの記述方法
-
実行中のOSを知るには?
-
C++での連続した左クリックの禁...
-
Sleep関数の最大時間について
おすすめ情報