マウスホイールを回してもOnMouseWheelが呼ばれない – プログラミング – Home

マウスホイールを回してもOnMouse...
 
通知
すべてクリア

[解決済] マウスホイールを回してもOnMouseWheelが呼ばれない


mk
 mk
(@mk)
ゲスト
結合: 25年前
投稿: 66
Topic starter  

VC++ 2010のMFC(ダイアログベース)を使用している者です。OSはwin7です。
表題の件ですが、ボタンのイベント

void CDeltaWarsDlg::OnBnClickedOk()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
m_btn_reset.EnableWindow(false);
m_btn_pause.EnableWindow(false);
reset();
}
が実行されると、マウスホイールを回してもOnMouseWheel関数が呼ばれなくなるという
怪現象が発生しました。

m_btn_reset.EnableWindow(false);
m_btn_pause.EnableWindow(false);

の2行をコメントアウトすると、マウスホイールでOnMouseWheelが正常に呼び出される
ので、原因はここだろうと思うのですが、OnMouseWheelと関係ない記述なので、どう対
処したらよいか判りません。
ちなみに、どちらか片方をコメントアウトすると、双方とも正常に動作します。

どう対処したらよいでしょうか。

お忙しいとは存じますが、よろしくお願いします。


引用未解決
トピックタグ
mk
 mk
(@mk)
ゲスト
結合: 25年前
投稿: 66
Topic starter  

なお、m_btn_resetとm_btn_pauseはCButtonです。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

まず、前提となる要件を整理しましょう。

 1.Wheelメッセージはキーボードフォーカスを持つウインドウに送付される。

ので、当然ですが、Disableなウインドウには送付されません。
この件はよろしいですね。
んで、当該行が実行された後、キーボードフォーカスは
どこにあるのか。が問題になるわけですが、
にわかにはわからないと思うので、そこで、このDLGに強制的に
フォーカスをSetFocus( hDlg);してみましょう。

 2.それでもWheelメッセージが来ない

場合は、DLG上のどれかのEditにカーソルが表示されて
いないか等を疑ってみましょう。まだ、ボタンも
キーボードフォーカスを獲得するのでそれにも注意が必要です。


返信引用
mk
 mk
(@mk)
ゲスト
結合: 25年前
投稿: 66
Topic starter  

ご返答、ありがとうございます。
例の二行の後に SetFocus();を加えると、正常に動作しました。

ご協力、感謝します。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました