マウスホイールを回してもOnMouseWheelが呼ばれない

[戻る]
mk 2012/02/27(月) 21:48:12
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 2012/02/28(火) 10:24:07
なお、m_btn_resetとm_btn_pauseはCButtonです。

仲澤@失業者 2012/02/28(火) 10:25:54
まず、前提となる要件を整理しましょう。

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

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

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

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

mk 2012/02/28(火) 11:02:58
[[解決]]
ご返答、ありがとうございます。
例の二行の後に   SetFocus();を加えると、正常に動作しました。

ご協力、感謝します。

古いスレッドには追加発言できません。