• 締切済み

マウスのクリックを無視したい

Visual C++ 2005、Windows APIを使ってアプリケーションを作成しています。 とあるファイルの処理に10数秒程度かかるため、この間はプログレスバー付きのダイアログを表示し、マウスカーソルも砂時計に変えています。 この処理の間にもしユーザーがメインウインドウのボタンなどをクリックした場合、クリックした瞬間は何も起こりませんが、処理が終わってプログレスバーが消えた途端にそのクリックに反応してしまいます。どうやらファイル処理中でも、マウスの挙動は記録されているようです。(メッセージキューに溜まってるのでしょうか?) 処理中のマウスのクリック情報は一切無視したい(破棄したい)のですが、どのような手段があるでしょうか?

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アドバイス ・次のAPIがあります。  BlockInput()  http://msdn.microsoft.com/ja-jp/library/cc410616.aspx  これを使ってみませんか?

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc410616.aspx
BearCave
質問者

お礼

早速試してみましたが、この関数はWindows上すべての入力を止めてしまうので、他のアプリにも影響が出てしまいます。自分のアプリ内だけで入力をブロックできれば良いのですが… アドバイスありがとうございました。

  • Apr2nd
  • ベストアンサー率69% (36/52)
回答No.2

メインウィンドウの方で処理している間は「EnableWindow()」で無効化しておいてもいいかも。

BearCave
質問者

補足

親ウインドウをEnableWindowで無効化してみましたが、やはり処理が終わってから、処理中に押したクリックに反応してしまいました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ダイアログを モーダルで表示すれば 親ウィンドウの操作は出来ないともいますが … WinAPIなら DialogBoxやDialogBoxIndirectなどでモーダルダイアログが作成出来ますよ

BearCave
質問者

お礼

すみません、補足内容は勘違いしていました。プログレスダイアログはCreateDialog関数で作ったモードレスです。でも親ウインドウの方はループで処理しているので、処理中は操作はできません。ダイアログをモーダルにしてしまうと、ファイル処理を親ウインドウではなく、プログレスダイアログに任せることになるので、汎用性が失われてしまいますが、検討してみます。アドバイスありがとうございました。

BearCave
質問者

補足

プログレスダイアログはモーダルですので、親ウインドウの操作はできません。なのでクリックした瞬間は何も起きませんが、処理が終わってダイアログが消えた途端に、以前押したクリックに反応してしまうというのが問題のポイントです。

関連するQ&A

専門家に質問してみよう