実現したいこと
ダイアログ上でマウスホイールしたら、モーダルダイアログに配置したリストボックスの選択を変更したいです。
発生している問題・分からないこと
ダイアログのPreTranslateMessageでリストボックスの選択を変更しようと考えましたが、ダイアログのPreTranslateMessageだけではなく、CWinApp継承クラスのPreTranslateMessageでWM_MOUSEWHEELを処理してダイアログにSendMessageしているのが関係しているのか、ダイアログのPreTranslateMessageにWM_MOUSEWHEELが入ってきません。
また、OnMouseWheelでは、リストボックス上でホイール操作したものが入ってこないため、実現できません。
PreTranslateMessageでも、OnMouseWheelでもいいので、マウスホイールでリストボックスの選択を変える方法があれば教えてください。
該当のソースコード
C++
1// PreTranslateMessageでやろうとしたときのソースコード2// CWinApp継承クラス3BOOL MyApp::PreTranslateMessage(MSG* pMsg)4{5 // 色んな処理6 if (pMsg->message == WM_MOUSEWHEEL) {7 CWnd* pTarget = CWnd::WindowFromPoint(CPoint(pMsg->lParam));8 pTarget->SendMessage(WM_MOUSEWHEEL, pMsg->wParam, pMsg->lParam);9 return TRUE;10 }11 return CWinApp::PreTranslateMessage(pMsg);12}13 14// CDialogEx継承クラス15BOOL MyDialog::PreTranslateMessage(MSG* pMsg)16{17 switch (pMsg->message) {18 case WM_MOUSEWHEEL:19 // リストボックスの選択を変える処理20 return TRUE;21 default:22 break;23 }24 25 return CDialogEx::PreTranslateMessage(pMsg);26}
試したこと・調べたこと
上記の詳細・結果
インターネットで検索しても有力な情報は得られませんでした・・・。
構造が似た簡易的なアプリケーションで試したら、CWinApp継承クラスのPreTranslateMessageでWM_MOUSEWHEELを処理しなかったら、ダイアログのPreTranslateMessageに入ってきました。ただ、システムが巨大で影響範囲が広いCWinApp継承クラスは変更しない方向で考えたいです。
補足
特になし

0 コメント