Я использую приложение, основанное на диалоге MFC, и имею подкласс CStatic
контроль. Я хотел бы получать WM_MOUSEWHEEL и другие сообщения в моем подклассе управления, но так или иначе эти сообщения никогда не приходят.
Вот как выглядит мой диалог:
Я делаю только несколько очень простых рисунков и хочу прокрутить мой список вверх и вниз.
Я уже сделал:
PreTranslateMessage
К сожалению, ничего не вызывается, когда я прокручиваю в диалоге / нажимаю клавишу или щелкаю мышью. Сообщения просто не приходят.
Вот мой обработчик Mousewheel, например:
class CFolderView : public CStatic
{
...
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
DECLARE_MESSAGE_MAP()
...
}
BEGIN_MESSAGE_MAP(CFolderView, CStatic)
ON_WM_MOUSEWHEEL()
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
BOOL CFolderView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
MessageBox("Mouse Wheel moved!", "Debug", MB_OK);
return CStatic::OnMouseWheel(nFlags, zDelta, pt);
}
Я не понимаю, почему входные сообщения не отправляются моему подклассу управления. Есть ли какой-то переключатель, который разрешает ввод для подкласса управления?
Вы не можете справиться WM_MOUSEWHEEL
в CStatic
потому что он не может сфокусироваться на дизайне.
Из MSDN:
Сообщение WM_MOUSEWHEEL отправляется в окно фокуса, когда мышь
колесо вращается
Глядя на ваш скриншот, я бы предложил разделить на подклассы CListBox
вместо.
Других решений пока нет …