CStatic subclassed Control не получает входные сообщения

Я использую приложение, основанное на диалоге MFC, и имею подкласс CStatic контроль. Я хотел бы получать WM_MOUSEWHEEL и другие сообщения в моем подклассе управления, но так или иначе эти сообщения никогда не приходят.

Вот как выглядит мой диалог:

введите описание изображения здесь

Я делаю только несколько очень простых рисунков и хочу прокрутить мой список вверх и вниз.

Я уже сделал:

  • Измените порядок табуляции, чтобы в первую очередь сосредоточиться на подклассе CStatic.
  • Перезаписал OnNcHitTest, чтобы постоянно фокусироваться на подклассе CStatic
  • Добавлена ​​полоса прокрутки в сторону
  • Написал обработчик сообщений для WM_MOUSEWHEEL, WM_LBUTTONDOWN, WM_KEYDOWN и WM_VSCROLL
  • Пробовал ловить сообщения в 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);
}

Я не понимаю, почему входные сообщения не отправляются моему подклассу управления. Есть ли какой-то переключатель, который разрешает ввод для подкласса управления?

1

Решение

Вы не можете справиться WM_MOUSEWHEEL в CStatic потому что он не может сфокусироваться на дизайне.

Из MSDN:

Сообщение WM_MOUSEWHEEL отправляется в окно фокуса, когда мышь
колесо вращается

Глядя на ваш скриншот, я бы предложил разделить на подклассы CListBox вместо.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]