VS2005, VC++, MFC, ダイアログベースアプリケーションです。
ダイアログにエディットを貼り付けています。
大きさを可変にしたいので、OnSize の中にコードで書きました。
if (m_pEdit == NULL)
{
m_pEdit = new CEdit();
m_pEdit->Create(ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL |
ES_AUTOHSCROLL | ES_WANTRETURN | WS_VISIBLE | WS_TABSTOP,
CRect(10, 10, m_nYoko, m_nTate), this, IDC_EDIT1);
}
マウスホイールを動かしたときに、ある動作をさせたいのですが
(ここでは仮にメッセージボックスを出すことにします)、
このエディットにカーソルがあるとき、マウスホイールを動かしても
メッセージボックスが出ません。
WM_MOUSEWHEEL メッセージが発生しないためと思います。
そこで試しに、もう1個のエディットをリソースビューを使って貼り付けました。
こちらのエディットにカーソルがあるときは、メッセージボックスが出ます。
コードで書いたエディットにフォーカスがあるとき、WM_MOUSEWHEEL メッセージが
発生するようにするにはどうしたらいいでしょうか?
あるいは、このエディットからフォーカスを外す方法があるでしょうか?
(例えば、OnMButtonDown でフォーカスを外す関数を実行するなど)
ビギナーで難しいことが判りませんが、よろしくお願いいたします。
エディットコントロールが複数行スタイルだからかな?
サブクラス化してエディットコントロール側の
WM_MOUSEWHEELで対処してみてはどうでしょうか。
subaruさん、有り難うございます。
> エディットコントロールが複数行スタイルだからかな?
その通りでした。
リソースビューで貼り付けたエディットも、MultiLine を TRUE にすると、
同じくWM_MOUSEWHEEL メッセージが発生しません。
自分の目的は、エディット上ではないところでマウスホイールを動かしたときに
ある動作をさせたいのです。
WM_MOUSEWHEELをどこで取得しているの?
エディットコントロールのWM_MOUSEWHEELハンドラ?
CEditということは、これは試していませんね。
ダイアログのWM_MOUSEWHEELハンドラ?
ダイアログのPreTranslateMessageなら、そのダイアログの子ウィンドウも含めてフォー
カスがあればPostMessage系のメッセージのすべてを横取りできる。
フォーカスない時はどうなるのか知らない。
フォーカスなくてもスクロールするアプリがあるね。
wclrp ( 'o')さん
ダイアログのWM_MOUSEWHEELハンドラです。
このダイアログには、エディットコントロールが複数個あるだけで、
ほかにはOKボタン等もありません。
subaruさんのヒントで、シングルラインのエディットであればフォーカスが
あっても、ダイアログのWM_MOUSEWHEELメッセージが出ることが判ったので、
ダミーのシングルラインのエディットを1個設けました。
そのサイズをゼロにしました。つまり見えないエディット。
マウスの中ボタンを押したとき、GotoDlgCtrl(ダミーエディット)を実行して
フォーカスをダミーエディットに移すようにしました。
これで、中ボタンを押すという操作が増えるものの、目的をかなえられます。
ありがとうございました。