はじめまして。最近MFCを使い始めたこんてと申します。
経験はCが半年位、MFCが2ヶ月位です。
MFCでサンプルで作成したダイアログ上に、ホイール操作のみを受け付けるボタンを複数配置したいと考えています。
ボタンのクラスを単独で作成して、CWnd::OnMouseWheelでイベントをキャッチするようにしたのですが、その場合は
●一度ボタン位置でクリックしてからでないと、ホイールイベントをボタンが
受け取る事が出来ない
です。
ダイアログ上をマウスが移動して、ボタン座標内に入ったら、ホイールボタンを押すと即座に反映するようにしたいのですが、どのようにしたら良いのでしょうか。
方針だけで良いので、宜しくお願いします。
フォーカスを移さずにホイールを機能させるには?
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200205/02050118.txt
親ダイアログのPreTranslateMessageにこんな記述を追加してみては
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message){
case WM_MOUSEWHEEL:
POINT pos;
CWnd* pWnd;
GetCursorPos(&pos);
pWnd = WindowFromPoint(pos);
pWnd->SendMessage(WM_MOUSEWHEEL,pMsg->wParam,pMsg->lParam);
return TRUE;
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
ととと さんのコードで問題ありませんが、
1.カーソル直下がコンボボックスだとうっとうしい事になる。
という問題が発生しがちです。できたら、
A."button"クラスのみにSendMessage()する
B.かつ、ボタンのIDまで限定すれば、なお良し
C."ComboBox"には送らない
等も検討すると、なお良いかもしれません。
ととと様
ありがとうございました!解決しました。
親にC×××::PreTranslateMessage()を追加してイベントをキャッチすれば良かったんですねー。ボタンの方で何とかしなければとハマってました。
WINAPIとMFCの組み合わせ?のような使い方が思いつかなかったので、勉強になります。
仲澤様
アドバイスありがとうございます!
今回はコンボボックスは使用しないですが、参考にさせて頂きます。
ツイート | ![]() |