
VC++(6.0)/MFCにてアプリを開発しています。
メイン画面上にリストボックス・リストビュー・ボタンの各コントロールを配置し、
ユーザがいつでも操作できるようになっています。
そこで、ユーザがリストボックス等をマウスにてスクロール中に、バックグラウンド
処理でモーダルダイアログを表示すると、マウスダウン中に突然フォーカスが失われ
るため操作中のコントロールに対しマウスアップメッセージが送信されずモーダルダ
イアログ側へフォーカスが強制的に移動してしまいます。
操作中のコントロールは、マウスアップイベントが送信されていないため、奇妙な動
きをするようになります。
この場合、画面上の全てのコントロールに適応可能な「フォーカスが失われたよ」的
な処理を実装したいのですが、どのようにすればよいのでしょうか。
現在は、コントロール単位でオーバーライドしてLostFocus等で処理しています。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
参考にしてください。
あしからず勘違いしている人が実に多いのでいつも驚きますが
まずSetFocus()等に関連する「フォーカス」とは
キーボードの入力権なのであって、そもそもマウスとは
関係ありません。マニュアルを確認してください。
マウスメッセージをロストするのは他のウインドウが
マウスをキャプチャしたり、アクティブになったり
するからであって、キーボードフォーカスを
失ったからではありません。従ってこの場合対処すべきメッセージは
WM_CAPTURECHANGEDやWM_ACTIVATEなのです。これらのハンドラで
処理の中止を行うと解決するかもしれません。
整理すると処理すべき、又は、いきなり失う可能性のある
エッセンシャルには、
1.キーボード入力権(キーボードフォーカス)
2.マウスメッセージ占有権(マウスキャプチャ)
3.前面占有権(アクティベート)
があるといえます。それぞれ得た場合と失った場合の処理が
必要な場合があると言えます。
Situgyosyaさん
勉強不足でした。
今まで無理矢理いろんなことをしていたことを後悔しています。
もう少し本筋を勉強しなおすようにします。
エッセンシャルについては大変参考になりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
業務に差し支えのないテンキー...
-
どこにもフォーカスを当てたくない
-
C# ReadOnlyのTextBoxで
-
他の人には声だして挨拶してる...
-
コマンドボタンのEnterイベント...
-
テキストボックス入力後、警告...
-
酸素ボンベのレギュレーターか...
-
エクセルVBA テキストボックス...
-
矢印(左右)キーでイベントを...
-
GridViewでハイライトを使用し...
-
タブコントロールのフォーカス...
-
F503iにSVって表示されてるんで...
-
Private Sub内でSubをCallしたい
-
メロディーについて。意見を聞...
-
油性マジックで書いたサインを...
-
Accessの更新後処理で特定の条...
-
他アプリのツリービューの指定...
-
MFCでコンボボックスを選択不可...
-
Webデザイン:回る地球儀
-
ユーザーフォームのSetFocusが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
他の人には声だして挨拶してる...
-
どこにもフォーカスを当てたくない
-
C# ReadOnlyのTextBoxで
-
ユーザーフォームのSetFocusが...
-
エクセルVBA テキストボックス...
-
業務に差し支えのないテンキー...
-
矢印(左右)キーでイベントを...
-
MFCでコンボボックスを選択不可...
-
油性マジックで書いたサインを...
-
Private Sub内でSubをCallしたい
-
テキストボックス入力後、警告...
-
プログラムからTera Termに文字...
-
コマンドボタンのEnterイベント...
-
GridViewでハイライトを使用し...
-
VB.NET ボタン押下で一つ前の...
-
F503iにSVって表示されてるんで...
-
Accessの更新後処理で特定の条...
-
酸素ボンベのレギュレーターか...
-
油性マジックの消し方
-
池袋サンシャイン通りでキャッ...
おすすめ情報