Visual C++ 2005、Windows APIを使ってアプリケーションを作成しています。
とあるファイルの処理に10数秒程度かかるため、この間はプログレスバー付きのダイアログを表示し、マウスカーソルも砂時計に変えています。
この処理の間にもしユーザーがメインウインドウのボタンなどをクリックした場合、クリックした瞬間は何も起こりませんが、処理が終わってプログレスバーが消えた途端にそのクリックに反応してしまいます。どうやらファイル処理中でも、マウスの挙動は記録されているようです。(メッセージキューに溜まってるのでしょうか?)
処理中のマウスのクリック情報は一切無視したい(破棄したい)のですが、どのような手段があるでしょうか?
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
★アドバイス
・次のAPIがあります。
BlockInput()
http://msdn.microsoft.com/ja-jp/library/cc410616 …
これを使ってみませんか?
参考URL:http://msdn.microsoft.com/ja-jp/library/cc410616 …
早速試してみましたが、この関数はWindows上すべての入力を止めてしまうので、他のアプリにも影響が出てしまいます。自分のアプリ内だけで入力をブロックできれば良いのですが… アドバイスありがとうございました。
No.2
- 回答日時:
メインウィンドウの方で処理している間は「EnableWindow()」で無効化しておいてもいいかも。
この回答への補足
親ウインドウをEnableWindowで無効化してみましたが、やはり処理が終わってから、処理中に押したクリックに反応してしまいました。
補足日時:2008/05/16 10:39No.1
- 回答日時:
ダイアログを モーダルで表示すれば 親ウィンドウの操作は出来ないともいますが …
WinAPIなら DialogBoxやDialogBoxIndirectなどでモーダルダイアログが作成出来ますよ
この回答への補足
プログレスダイアログはモーダルですので、親ウインドウの操作はできません。なのでクリックした瞬間は何も起きませんが、処理が終わってダイアログが消えた途端に、以前押したクリックに反応してしまうというのが問題のポイントです。
補足日時:2008/05/16 10:30すみません、補足内容は勘違いしていました。プログレスダイアログはCreateDialog関数で作ったモードレスです。でも親ウインドウの方はループで処理しているので、処理中は操作はできません。ダイアログをモーダルにしてしまうと、ファイル処理を親ウインドウではなく、プログレスダイアログに任せることになるので、汎用性が失われてしまいますが、検討してみます。アドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(OS) Mac OSの操作について 2 2022/06/08 09:19
- Windows 10 Windows10の不具合(Critical Process Died) 9 2022/04/19 21:11
- Windows 10 (緊急)windowsのタスクバーやアプリ?が反応しない 3 2023/03/28 05:03
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- マウス・キーボード real vnc viewer で遠隔先で操作が出来ない。 2 2023/07/24 15:00
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) [貼り付けオプション]とは? 3 2022/04/17 08:15
- マウス・キーボード Bluetoothのクイックペアリングについて 8 2023/03/25 16:50
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
ボタンクリックイベント 重複防止について
C言語・C++・C#
-
ビジュアルC++でボタンの有効/無効
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
-
4
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
5
UpdateData( FALSE); による文字列データの表示更新(VC++6.0)
C言語・C++・C#
-
6
画面を強制的に再描画させる方法
C言語・C++・C#
-
7
VC++でコントロールの境界線を描画する方法
C言語・C++・C#
-
8
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
9
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
10
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
11
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
12
ダイアログ属性の変更
C言語・C++・C#
-
13
MFCでbitmapを背景にしてstaticテキストを透過させる方法
C言語・C++・C#
-
14
MFCでOnPaintのタイミング
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メッセージボックスのボタン名変更
-
VBSで応答不要のメッセージボッ...
-
VBSの処理中一旦処理を止めて再...
-
Excel(VBA)シート上のコマンド...
-
ACCESS側からEXCELの書式を設定...
-
エクセルが勝手に立ち上がる
-
【C#】 あるイベントから別イ...
-
Excel VBA で処理中断(DoEvents...
-
ASP.NETでのメッセージ画面を出...
-
Application.ScreenUpdating=Fa...
-
vb.netでバッチ処理
-
VbScriptでExcel操作待ちモード...
-
ボタンが押された事を検知する...
-
DoEvents(VBA)の質問です。
-
VBA メッセージボックスを自動...
-
VBA、UserFormを前面に出力して...
-
VB.NETのUsingキーワードの使い方
-
エクセルVBAでクリップボード内...
-
VCでウエイトをミリ秒でかけ...
-
メッセージBOXの「はい」「いい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
VBA kernel32 の意味
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
エクセルVBAでクリップボード内...
-
Application.ScreenUpdating=Fa...
-
Excel VBA で処理中断(DoEvents...
-
VBA メッセージボックスを自動...
-
【C#】 あるイベントから別イ...
-
VBA、UserFormを前面に出力して...
-
ASP.NETでのメッセージ画面を出...
-
Excel VBA 自動的に閉じるMsgBox
-
スロットゲームのプログラミング
-
キーボード入力、マウス操作を...
-
<input type="file">タグで「キ...
-
Excelのワークシートに行を挿入...
-
ボタンが押された事を検知する...
-
VB6 コマンドボタン クリック...
-
VCでウエイトをミリ秒でかけ...
おすすめ情報