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と関係ない記述なので、どう対
処したらよいか判りません。
ちなみに、どちらか片方をコメントアウトすると、双方とも正常に動作します。
どう対処したらよいでしょうか。
お忙しいとは存じますが、よろしくお願いします。
なお、m_btn_resetとm_btn_pauseはCButtonです。
まず、前提となる要件を整理しましょう。
1.Wheelメッセージはキーボードフォーカスを持つウインドウに送付される。
ので、当然ですが、Disableなウインドウには送付されません。
この件はよろしいですね。
んで、当該行が実行された後、キーボードフォーカスは
どこにあるのか。が問題になるわけですが、
にわかにはわからないと思うので、そこで、このDLGに強制的に
フォーカスをSetFocus( hDlg);してみましょう。
2.それでもWheelメッセージが来ない
場合は、DLG上のどれかのEditにカーソルが表示されて
いないか等を疑ってみましょう。まだ、ボタンも
キーボードフォーカスを獲得するのでそれにも注意が必要です。
ご返答、ありがとうございます。
例の二行の後に SetFocus();を加えると、正常に動作しました。
ご協力、感謝します。